Динамическая загрузка таблиц SQL в Entity Framework - PullRequest
4 голосов
/ 18 февраля 2011

Мне нужен динамический доступ к некоторым таблицам SQL, надеюсь, с помощью Entity Framework. Вот некоторый псевдокод:

var Account = DB.Accounts.SingleOrDefault(x => x.ID == 12345);

, который возвращает мне объект Account, и он содержит некоторые поля с именами «PREFIX», «CAMPAIGN ID», а дополнительная информация об учетных записях хранится в отдельных таблицах SQL с соглашением об именах PREFIX_CAMPAIGNID_MAIN.

У всех таблиц одинаковые поля, поэтому я думал о создании новой сущности, которая нигде не отображается, а затем ее динамической загрузке, например:

var STA01_MAIN = new MyAccount(); // my "un-mapped" entity

DB.LoadTable('STA01_MAIN').LoadInto(STA01_MAIN);

Теперь я могу получить что-нибудь о счете STA01_MAIN: STA01_MAIN.AccountId.

Итак, мой вопрос: как мне получить доступ к этим таблицам с помощью Entity Framework?

1 Ответ

3 голосов
/ 18 февраля 2011

Я не думаю, что EF имеет метод LoadTable и LoadInto, но ObjectOntext.ExecuteStoreQuery может быть тем, что вы ищете:

http://msdn.microsoft.com/en-us/library/dd487208.aspx

Это должно позволитьвы выполняете произвольный запрос к вашей базе данных, а затем сопоставляете результаты с произвольным типом, который вы укажете (даже если он не отображается в EF).

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

Вот дальнейшее обсуждение его использования

http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/44cf5582-63f8-4f81-8029-7b43469c028d/

Рассматривали ли вы отображение всех этих таблиц (с одинаковыми столбцами) в отношения наследования вEF, а затем запросить их как

db.BaseTypes.OfType<SpecificType>().Where(/*.....*/);

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