Автоматически сгенерированные имена таблиц Entity Framework - PullRequest
5 голосов
/ 19 марта 2011

Используя Entity Framework, часто пишутся запросы, такие как

var orders = from o in context.Orders.Include("Customer")
             where o.OrderDate.HasValue && o.OrderDate.Value.Year == 1997
             orderby o.Freight
             select o;

Что действительно вызывает у меня отток желудка, так это строковый аргумент "Customer". Мне трудно поверить, что EF не генерирует имена таблиц как константы где-то. Кто-нибудь знает лучший подход, чем использование строки? для опции Include fetch?

Ответы [ 4 ]

6 голосов
/ 19 марта 2011

EF 4.1 имеет строго типизированную версию Include, пригодную для использования в IQueryable, ObjectQuery и DbQuery.Добавив ссылку на EntityFramework.dll (EF 4.1), вы можете добавить ее с помощью System.Data.Entity и использовать загрузку с лямбда-выражениями

// get Orders with related Customers
var orders = from o in context.Orders.Include(o => o.Customer) ...

Редактировать:

Если вы этого не сделаетехотите использовать EF 4.1, проверьте , эту статью .Я уже использовал в своем проекте, и я доволен этим.

1 голос
/ 19 марта 2011

Как насчет

Include(context.Customers.EntitySet.Name)

?

1 голос
/ 19 марта 2011

Вы можете создать текстовый шаблон, который позволит вам генерировать код в дополнение к стандартному коду EF. Вы можете сделать это, щелкнув правой кнопкой мыши и нажав «Добавить элемент генерации кода».

В этом текстовом шаблоне вы можете создавать свои константы так, как вам нужно, в "CustomerProperties" и создавать имя константы для каждого свойства навигации.

http://msdn.microsoft.com/en-us/data/gg558520

1 голос
/ 19 марта 2011

IMT GetType может помочь вам, кроме файла .edmx, где хранятся все определения,

 context.Orders.Include(CustomerEntity.GetType.Name or full name )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...