EF 4.2中的级联删除问题(代码优先)

时间:2012-01-09 15:35:03

标签: c# entity-framework ef-code-first

我有一个名为User的实体。用户应该在多语言环境中使用 所以用户看起来像

    class User{
 virtual ICollection<TextEntry> Name {get; set;}
 virtual ICollection<TextEntry> Info {get; set;}
...
}

class TextEntry
{
int id {get; set;}
string Text {get; set;}
string Culture {get;set;}
}

我还有一个用户规则

    modelBuilder.Entity<User>()
        .HasMany(q => q.Name)
        .WithOptional()
        .WillCascadeOnDelete();

    modelBuilder.Entity<User>()
        .HasMany(q => q.Info)
        .WithOptional()
        .WillCascadeOnDelete();

根据这条规则,EF无法创建模型 Esception消息是“在表'TextEntry'上引入FOREIGN KEY约束'User_Info'可能导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。\ r \ n不能创建约束。查看以前的错误。“

如果没有这个规则,我会在尝试删除用户时遇到异常,因为引用约束。

如何在不为User.Info数据创建额外实体的情况下解决此问题?

1 个答案:

答案 0 :(得分:1)

此错误来自SQL Server,而不是来自Entity Framework。实体框架为两次出现的TextEntry创建一个表。

可能最简单的解决方案是从TextEntry派生另外两个类,使TextEntry成为抽象,并将这两个映射到不同的表(TPC)。