0

У меня есть два объекта. Событие и пользователь. Я хочу сохранить создателя (= пользователь) события как контакт в моей сущности Event. Кроме того, я хочу иметь несколько руководств (= пользователь также), связанных с моим событием.EF6 не генерирует модель данных сущности, как ожидалось

Это (часть) мой код:

public class User 
{ 
    public int ID { get; set; } 
    public string LoginName { get; set; } 
    public string DisplayName { get; set; } 
    public virtual ICollection<Event> Events { get; set; } 
} 

public class Event 
{ 
    public int ID { get; set; } 
    public string EventName { get; set; } 
    public User ContactName { get; set; } 

    public virtual ICollection<Room> Rooms { get; set; } 
    public virtual ICollection<User> Users { get; set; } // These are the guides 
    public virtual ICollection<Equipment> Equipments { get; set; } 
    [Required] 
    public EventType Type { get; set; } 
} 

Я ожидаю Ef6 (6.1.3) для создания 1: п и п: м отношения между Пользователем и Event. То, что он делает вместо этого можно увидеть на скриншоте ниже:

This is what EF6 generates from my model

Существует один 1: п отношение - как и ожидалось. Но вместо одного отношения n: m существует одно отношение 1: n и одно n: 1. Пожалуйста помоги.

ответ

2

Для многих ко многим ссылке, Вы должны написать его в функции:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 

    modelBuilder.Entity<User>() 
       .HasMany<Event>(s => s.Events) 
       .WithMany(c => c.Users) 
       .Map(cs => 
         { 
          cs.MapLeftKey("UserRefId"); 
          cs.MapRightKey("EventRefId"); 
          cs.ToTable("UserEvent"); 
         }); 

} 

Это подразумевает новую таблицу между два других

Вы можете следить за этим guide

+0

Работает безупречно. Спасибо. Но действительно ли я должен написать это так? Потому что отношение «многие-многие» работает, когда я опускаю свойство «ContactName». Почему я должен сказать EF, как разрешить отношение в этом конкретном случае? – markai

+0

Нет, вы правы, я думаю, что это должно работать без. Установили ли вы, что ForeignKey, как Developper, предлагает вам? Я думаю, что движок моделирования немного потерян, когда есть несколько ссылок на один и тот же объект. По моему опыту, иногда нам нужно добавить немного свободного кода, чтобы добиться того, чего мы хотим в коде, сначала увы ... – Mathieu

+0

Да, я это сделал. Еще не повезло. Собираюсь оставить его так, как вы сказали. Спасибо за поддержку. – markai

0

Там разве внешнего ключа отношения отображенный в классе Event:

public class Event 
{ 
    public int ID { get; set; } 
    public string EventName { get; set; } 

    public int ContactId {get ; set;} 
    [ForeignKey("ContactId")] 
    public virtual User Contact { get; set; } 

    public virtual ICollection<Room> Rooms { get; set; } 
    public virtual ICollection<User> Users { get; set; } // These are the guides 
    public virtual ICollection<Equipment> Equipments { get; set; } 
    [Required] 
    public EventType Type { get; set; } 
} 
+0

Спасибо, но это не работает для меня. Результат тот же – markai