Ido*_*Ran 9 entity-framework ef-code-first ef-migrations
我正在使用EF 4.3迁移功能来创建数据库迁移脚本.当我运行Add-Migration命令时,生成的脚本创建如下:
CreateTable(
"dbo.Recipients",
c => new
{
RecipientID = c.String(nullable: false, maxLength: 128),
SurveyRoundID = c.String(nullable: false, maxLength: 128),
LastUpdatedAt = c.DateTime(),
})
.PrimaryKey(t => t.RecipientID)
.ForeignKey("dbo.Employees", t => t.EmployeeID, cascadeDelete: true)
.ForeignKey("dbo.SurveyRounds", t => t.SurveyRoundID, cascadeDelete: true)
.Index(t => t.EmployeeID)
.Index(t => t.SurveyRoundID);
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是scafolding迁移选择cascadeDelete为true,即使实体Recipient不是关系的主人.
现在我手动将cascadeDelete参数更改为false,但我想知道默认情况下为什么选择true.
谢谢,Ido.
dan*_*fer 11
感谢您的回答,它帮助了我,因为我注意到并且在尝试更新数据库时有时会出错,因为我的几个类有多个关系使得级联删除不理想.
请参阅下面的删除级联删除默认设置:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
}
Run Code Online (Sandbox Code Playgroud)
这是在Context类中.
它按预期工作.它不是关系中的主体实体,因此它定义了外键约束,并且该约束具有级联删除选项.将cascade delete设置为true(除非删除约定或在流畅映射中更改它,否则首先在EF代码中默认设置)表示如果Employee删除了记录,则级联删除将触发删除Recipient(相同的应用SurveyRounds).
这个模型对于级联删除实际上并不理想,因为实体依赖于多个关系.您应该在实体映射中直接删除级联删除.
| 归档时间: |
|
| 查看次数: |
4095 次 |
| 最近记录: |