1

我有一个公司的模式:OnCascadeDelete和Entity Framework

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

    ... 

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

并有useraccount模型:

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

    ... 

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

所以这是上午: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>(); 

初始化工作。

我想继续删除级联,但我不知道如何管理它。 我也想保留这两个虚拟属性,这样我就可以从一个公司和这个用户帐户访问这些公司的useraccounts。

例外顺便说一句是:

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

回答

0

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

,当你有一些“自我参照”实体 (直接或间接)通常出现 - 但我没有看到这里,这是典型的 许多一对多。

但是,如果问题仍然存在,您可以始终自己实现连接表 - 通过对级联的更多控制 - 并且通常可以解决问题(如果可能)。

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

EF5 And cycles or multiple cascade paths, FOREIGN KEY

看一看,看看是否有帮助。

+0

但是在那里设置了“禁用级联删除”(.WillCascadeOnDelete(false);)。 – mosquito87 2013-04-05 07:59:25

+0

我不确定你在问什么 - “只要将其设置为真”,这是否可行? – NSGaga 2013-04-05 10:00:51