entity-framework - Entity Framework 代码首先是多对多

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

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

首先,我首先使用良好的代码创建了多对多关系。每个人可以在多个俱乐部中,每个俱乐部可以有多个成员。 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表中的PeoplePerson_Id表中的Creator_IdClubs取代。

如您所见,这将不起作用,当我尝试添加人/俱乐部时,它会给我以下错误:
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/

相关文章:

c# - Entity Framework - 外键组件......不是类型的声明属性

entity-framework - 强制 EF 4.1 Code First 将附加实体视为已修改

c# - Entity Framework 包含语法

c# - 如何通过 EF Code First 使用遗留类?

c# - 如何在 C# 中创建与 Mysql 的全新连接?

entity-framework - EF5 迁移更新-数据库-脚本错误

c# - 是否可以在不初始化 NHibernate 集合的情况下添加多对多关系?

php - 如何在mysql中搜索?

python - 基于此模型触发另一个模型的数据更改(M2M)

entity-framework - 当我部署到生产环境时停止自动迁移