Leo*_*eon 10 many-to-many entity-framework code-first ef-code-first
我搜索过每一个但是找不到答案......
首先,我使用代码创建了多对多的关系,并且运行良好.每个人可以在多个俱乐部,每个俱乐部可以有多个成员.该ClubPersons
表已在DB中创建.
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; }
}
Run Code Online (Sandbox Code Playgroud)
然后我需要添加俱乐部的创建者,这也是一个人(一对多):
public class Club
{
public int ClubId { get; set; }
public virtual ICollection<Person> Members { get; set; }
public virtual Person Creator { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这样做之后,ClubPersons
在数据库表中已经没有了,取而代之的是Club_Id
在People
表Person_Id
,并Creator_Id
在Clubs
表中.
正如您所看到的,这不起作用,当我尝试添加人/俱乐部时,它会给我以下错误:
Multiplicity constraint violated. The role 'Person_Clubs_Source' of the relationship 'Test.Models.Person_Clubs' has multiplicity 1 or 0..1.
Run Code Online (Sandbox Code Playgroud)
我的问题是,首先在代码中定义这种关系的正确方法是什么?多对多对一
非常感谢
Die*_*hon 10
将以下方法添加到您的上下文中:
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);
}
Run Code Online (Sandbox Code Playgroud)
这将使EF在Club.Creator <=> Person.Clubs上保持双向关系
归档时间: |
|
查看次数: |
7481 次 |
最近记录: |