1

我有一个公司模型:

public class Company
{
    public int Id { get; set; }

    ...

    public virtual ICollection<Useraccount> Useraccounts { get; set; }
}

和一个用户帐户模型:

public class Useraccount
{
    public int Id { get; set; }

    ...

    public virtual ICollection<Company> Companies { get; set; }
}

所以它是 am:n 连接:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();            

        modelBuilder.Entity<Company>()
            .HasMany(c => c.Useraccounts).WithMany(i => i.Companies)
            .Map(t => t.MapLeftKey("CompanyId")
                .MapRightKey("UseraccountId")
                .ToTable("UseraccountCompany"));            
    }

但是,初始化数据库时会引发异常。

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();

初始化工作。

我想保持级联删除,但我不知道如何管理它。我还想保留两个虚拟财产,以便我可以访问公司的用户帐户和用户帐户的公司。

顺便说一句,例外是:

在表“UseraccountCompany”上引入 FOREIGN KEY 约束“Company_Useraccounts_Target”可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。无法创建约束。

4

1 回答 1

0

这应该有效(您可能尚未在模型中发布一些相关位 - 流畅的配置)。

当您有一些“自我引用”实体(直接或间接)时,通常会出现这种情况 - 但我在这里看不到,这是典型的多对多。

但是如果问题仍然存在,您总是可以自己实现连接表——对级联有更多的控制——这通常可以解决问题(如果可能的话)。

我讨厌重新输入:) -这几乎是确切的问题 - 手动完成多对多(第 2 部分)。

EF5 和循环或多个级联路径,外键

看看它是否有帮助。

于 2013-04-04T17:33:13.170 回答