2013-03-25 3 views
0

У меня есть следующие 2 объектные отношения, которые у меня возникают много проблем, получить право отображение (с помощью текучего API)EF Code First Конфигурация- Регистрация таблицы dilemna

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

public class User { 
    public int UserId { get; set; } 

    public virtual ICollection<Item> ItemsOwned { get; set; } 
    public virtual ICollection<Item> ItemsBorrowed{ get; set; } 
} 

public class Item { 
    public int ItemId { get; set; } 
    public virtual User ItemOwner{ get; set; } 
    public virtual ICollection<User> ItemBorrowers { get; set; } 
} 

Похоже, мне нужен один-ко-многим, а также многие-ко-многим. Я пробовал бесчисленные конфигурации, и я думаю, что просто сбиваю с толку.

Как правильно установить отношения? Нужна ли мне таблица соединений или нет?

ответ

1

Это выглядит нормально на первый взгляд (и что @Jayantha предложил делать, если это достаточно прямо) - хотя обычно вы один «пункт» позаимствована у один раз (так что тогда это будет один-ко-многим).

Если вы ищете историю «заимствованных» предметов (что делает ее много-ко-многим), то вам нужно будет сделать ручную таблицу индексов с дополнительными флагами (например, active и т. Д.). ,

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

Many to many (join table) relationship with the same entity with codefirst or fluent API?

Code First Fluent API and Navigation Properties in a Join Table

EF code-first many-to-many with additional data

1

Вам нужно создать отображение, как это,

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 

     modelBuilder.Entity<Item>().HasRequired(i=>i.ItemOwner).WithMany(u=>u.ItemsOwned);   
     modelBuilder.Entity<Item>().HasMany(i=>i.ItemBorrowers).WithMany(u=>u.ItemsBorrowed);   
} 
+0

Спасибо за ответ. Как это отличается от стратегии «многие ко многим», которую я вижу в других примерах, используя Map (mc => {/ * MapLeftKey/MapRightKey/ToTable * /}) ;? Я пытаюсь ответить сейчас. – parliament

+0

Кажется, что не работает для части «многие-ко-многим». Получение множественности недействительно в роли «Item_ItemBorrowers_Source» в отношениях «Item_ItemBorrowers». Допустимые значения множественности для главной роли - «0..1» или «1». Есть идеи? – parliament

+0

Закончен с объединенным столом, как описано в NSGaga. – parliament

Смежные вопросы