Entity Framework - Просмотр базы данных или присоединения в Linq к сущностям - PullRequest
4 голосов
/ 28 февраля 2011

У меня есть таблица базы данных со многими справочными таблицами:

OrderType  
ShippingType  
etc.

Таблица «Мой заказ» ссылается на каждую из этих таблиц:

Order
  OrderID
  OrderTypeID
  ShippingTypeID

Я использую Entity Framework в качестве слоя доступа к данным. У меня есть страница, на которой должна отображаться информация для заказа. Я изо всех сил пытаюсь найти лучший / правильный способ использовать эти объекты.

На моей странице должны отображаться такие данные:

Заказ № 1000000
Тип доставки: UPS
Тип заказа: Онлайн
И т. Д. Тип: и т. Д.

Лучше ли создать представление в базе данных, которое возвращает нужные мне данные, а затем добавить их в мою модель сущности и просто использовать это напрямую, чтобы мне не приходилось записывать соединения в моих запросах? Или лучше создать промежуточный класс примерно так:

class OrderView
{
    public int OrderNumber { get; set; }
    public string OrderType { get; set; }
    public string ShippingType { get; set; }
}

var order = from o in db.Orders
            join ot in db.OrderTypes on o.OrderTypeID equals ot.OrderTypeID
            join st in db.ShippingTypes on o.ShippingTypeID equals st.ShippingTypeID
            select new OrderView 
            { 
                OrderNumber = o.OrderNumber, 
                ShippingType = st.Description, 
                OrderType = ot.Description 
            };

Какой способ лучше?

Ответы [ 4 ]

5 голосов
/ 28 февраля 2011

Вам не нужны join, как таковые. Что вы можете сделать, это использовать Navigation Properties для OrderType и ShippingType, чтобы получить к ним доступ без необходимости объединений. У вас будет что-то вроде:

var order = from o in db.Orders
            select new OrderView 
            { 
                OrderNumber = o.OrderNumber, 
                ShippingType = o.ShippingType.Description, 
                OrderType = o.OrderType.Description 
            };

Я не вижу никаких преимуществ делать это в представлении.

1 голос
/ 28 февраля 2011

Вы можете использовать Linq-to-entity.Я обычно переключаюсь на SQL или View, когда у меня есть что-то, что я не могу написать в L2E (например, выражение для общих таблиц и высокотехнологичные запросы) или когда производительность L2E плохая.Если у вас нет этих проблем, вы должны быть довольны L2E.

Кстати.Ваш запрос может быть переписан без объединений - черт побери, Крейг был быстрее.

0 голосов
/ 28 февраля 2011

использование представления базы данных может помешать оптимизатору SQL получить наилучший план выполнения.поэтому, если сгенерированный EF запрос не является ужасом (используйте SQL Profiler, чтобы убедиться!), я бы пошел на EF.

0 голосов
/ 28 февраля 2011

Представления могут быть хорошими по нескольким причинам:

  1. Они могут оградить вас от изменений в базовой структуре таблицы
  2. Они могут абстрагировать детали нормализации (объединения)
  3. Yoi может отменить все разрешения для таблиц и предоставить ограниченный доступ через представления.

Делайте все, что приведет к более понятному коду.

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