Pau*_*uly 16 ef-code-first entity-framework-4.1
实体框架代码首先可以为以下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; }
}
Run Code Online (Sandbox Code Playgroud)
我想通过ID字段而不是整个"Item"类与First和Second项建立关系.所以:
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; }
}
Run Code Online (Sandbox Code Playgroud)
也有效. 编辑:这实际上没有用.只需生成其他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; }
}
Run Code Online (Sandbox Code Playgroud)
导致以下异常.
{"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."}
Run Code Online (Sandbox Code Playgroud)
为什么?我该怎么做才能避免这种异常.
Pau*_*uly 21
我决定删除级联删除约定.
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
}
Run Code Online (Sandbox Code Playgroud)
原因是:
谢谢Ladislav Mrnka指出我正确的方向.
归档时间: |
|
查看次数: |
13780 次 |
最近记录: |