EF Code First - база данных «многие ко многим», домен «1 ко многим» - PullRequest
1 голос
/ 30 ноября 2011

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

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

Однако в базе данных мы храним порядок позиций в таблице сопоставления. То, что я хотел бы сделать, это представить это отношение в модели Doman как отношение 1 ко многим между графиком и позицией, а модель домена элемента строки имеет свойство целочисленного порядка.

Кажется, я не могу найти способ легко сгладить эту модель с помощью EF Code First и иметь возможность поместить свойство в позицию.

По сути, база данных:

Schedule
-Id

ScheduleLineItem
-ScheduleId
-LineItemId
-Order

LineItem
-Id

и модель предметной области, которую я хотел бы использовать:

Schedule
-Id
-List<LineItem>

LineItem
-Id
-Order

1 Ответ

1 голос
/ 30 ноября 2011

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

Например:

public class Schedule 
{
   public int Id { get; set; }
   public virtual ICollection<ScheduleLineItem> ScheduledItems { get; set; } // This is necessary for EF

   public IEnumerable<LineItem> LineItems 
   {
       return ScheduledItems.OrderBy(i => i.Order).Select(i => i.LineItem);
   }
}
...