Entity Framework Code First 可以为以下 POCO 生成数据库。
public class Item {
public int Id { get; set; }
public string Name { get; set; }
}
public class ItemPair {
public int Id { get; set; }
public virtual Item FirstItem { get; set; }
public virtual Item SecondItem { get; set; }
}
我想通过 ID 字段而不是整个“项目”类来建立与第一个和第二个项目的关系。所以:
public class ItemPair {
public int Id { get; set; }
public virtual Item FirstItem { get; set; }
public int FirstItem_Id { get; set; }
public virtual Item SecondItem { get; set; }
public int SecondItem_Id { get; set; }
}
也有效。 编辑 : 这实际上没有用。只需生成额外的 FirstItem_Id1 和 SecontItem_Id2 列。
但只需将外键属性更改为 FirstItemId、SecondItemId(不带下划线),如下所示:
public class ItemPair {
public int Id { get; set; }
public virtual Item FirstItem { get; set; }
public int FirstItemId { get; set; }
public virtual Item SecondItem { get; set; }
public int SecondItemId { get; set; }
}
导致以下异常。
{"Introducing FOREIGN KEY constraint 'ItemPair_SecondItem' on table 'ItemPair' may cause
cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION,
or modify other FOREIGN KEY constraints.\r\nCould not create constraint.
See previous errors."}
为什么?我能做些什么来避免这个异常。
最佳答案
我决定只删除级联删除约定。
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
}
原因是:
感谢 Ladislav Mrnka 为我指明了正确的方向。
关于entity-framework-4.1 - Entity Framework 代码优先 : FOREIGN KEY constraint may cause cycles or multiple cascade paths,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8216711/