EF6没有按预期生成实体数据模型

时间:2016-08-25 14:01:11

标签: c# asp.net asp.net-mvc entity-framework entity-framework-6

我有两个实体。活动和用户。我想将事件的创建者(=用户)保存为我的Event实体中的联系人。另外,我想要有几个与我的活动相关的指南(=用户)。

这是我的代码的一部分:

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:n和n:m关系。它的作用可以在下面的截图中看到:

This is what EF6 generates from my model

有一个1:n的关系 - 正如预期的那样。但是,不是一个n:m关系,而是一个1:n和一个n:1的关系。请帮忙。

2 个答案:

答案 0 :(得分: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

进行操作

答案 1 :(得分: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; }
}