【问题标题】:Entity framework code first many to many实体框架代码首先是多对多
【发布时间】:2011-07-29 20:29:42
【问题描述】:

我已经搜索了所有地方,但找不到答案...

首先,我首先使用代码创建了多对多关系,效果很好。每个人可以在多个俱乐部,每个俱乐部可以有多个成员。数据库中已创建ClubPersons 表。

public class Person
{
    public int PersonId { get; set; }
    public virtual ICollection<Club> Clubs { get; set; }
}

public class Club
{
    public int ClubId { get; set; }
    public virtual ICollection<Person> Members { get; set; }
}

然后我需要添加俱乐部的创建者,它也是一个人(一对多):

public class Club
{
    public int ClubId { get; set; }
    public virtual ICollection<Person> Members { get; set; }
    public virtual Person Creator { get; set; }
}

执行此操作后,DB 中的 ClubPersons 表已消失,取而代之的是 People 表中的 Club_IdClubs 表中的 Person_IdCreator_Id

如您所见,这不起作用,当我尝试添加人员/俱乐部时,它给了我以下错误:

Multiplicity constraint violated. The role 'Person_Clubs_Source' of the relationship 'Test.Models.Person_Clubs' has multiplicity 1 or 0..1.

我的问题是首先在代码中定义这种关系的正确方法是什么?多对多对一

非常感谢

【问题讨论】:

    标签: entity-framework many-to-many code-first ef-code-first


    【解决方案1】:

    将以下方法添加到您的上下文中:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Club>().HasRequired(x => x.Creator) //or HasOptional
                                   .WithMany() //Unidirectional
                                   .Map(x => x.MapKey("Creator")) //FK column Name
                                   .WillCascadeOnDelete(false);
    }
    

    这将阻止 EF 在 Club.Creator Person.Clubs 上假设双向关系

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      • 1970-01-01
      相关资源
      最近更新 更多