我有一个名为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数据创建额外实体的情况下解决此问题?
答案 0 :(得分:1)
此错误来自SQL Server,而不是来自Entity Framework。实体框架为两次出现的TextEntry创建一个表。
可能最简单的解决方案是从TextEntry派生另外两个类,使TextEntry成为抽象,并将这两个映射到不同的表(TPC)。