Как запросить идентичные таблицы БД по годам, используя Entity Framework Code First CTP5? - PullRequest
0 голосов
/ 08 марта 2011

Скажем, у меня есть база данных, в которой хранятся данные таблиц по годам с использованием идентичной схемы и одной таблицы в год.Примеры таблиц:

  • MyData2009
  • MyData2010
  • MyData2011

У меня есть проект с использованием Entity Framework CTP5 (Code First), который являетсяуже работает с таблицей за один год, используя класс MyData с классом репозитория, который возвращает IQueryable результаты, подобные следующим:

public static IQueryable<MyData> GetData(SiteDB db, string AccountNumber)
{
    return db.MyDatas.Where(oo => oo.AccountNumber == AccountNumber);
}

Как я могу реорганизовать вышеуказанный запроспоэтому я могу динамически указывать, какую таблицу (MyData2009, MyData2010 или MyData2011) она должна выполнять, но при этом по-прежнему возвращать IQueryable тип объекта?

Я думал, что, возможно, смогу создать MyData2009 , MyData2010 , MyData2011 классы, которые все наследуют от MyData , а затем заменяют параметр SiteDB переменной типа DbSet но похоже я не могу разыграть db.MyData2009s как DbSet

1 Ответ

0 голосов
/ 08 марта 2011

Если вы используете наследование TPC , ваш запрос должен выглядеть следующим образом:

public static IQueryable<T> GetData(SiteDB db, string AccountName) where T : MyData
{
  return db.MyDatas.OfType<T>().Where(oo => oo.AccountNumber == AccountNumber);
}

MyData будет базовым классом для всех ваших объектов данных, и каждый производный объект будет храниться в егособственный стол.Когда используется наследование, вам нужно DbSet только для базового типа, так что будьте внимательны с использованием OfType, или вы запросите все ваши таблицы.

Проблема этого решения в том, что каждый год вам придется добавлять новыетаблица и новый объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...