我已经搜索了所有内容,但找不到答案...
首先,我首先使用良好的代码创建了多对多关系。每个人可以在多个俱乐部中,每个俱乐部可以有多个成员。 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; }
}
完成此操作后,数据库中的
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.
我的问题是,首先在代码中定义这种关系的正确方法是什么?多对多一对一
非常感谢
最佳答案
在您的上下文中添加以下方法:
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上建立双向关系
关于entity-framework - Entity Framework 代码首先是多对多,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5550387/