【发布时间】:2014-11-13 20:28:26
【问题描述】:
我将这种模型用于 0..1 对多的关系。页面必须具有有效的图书 ID 或为空。
public class Book
{
[Key]
public Guid Id { get; set; }
public virtual List<Page> Pages { get; set; }
}
public class Page
{
[Key]
public Guid Id { get; set; }
public virtual Book Book { get; set; }
}
我想添加级联删除,这样如果一本书被删除,那么它的所有页面也会被删除,而不是设置为 null。
我可以(仅?)使用 fluent api 做到这一点:
modelBuilder.Entity<Page>()
.HasOptional(a => a.Book)
.WithOptionalDependent()
.WillCascadeOnDelete(true);
不适合使用[Required],因为该字段不是必需的。
但是,这会在数据库中创建另一列 Book_Id1、索引和外键,而不是在现有 FK 上添加级联删除,因为它被定义了两次。
如果我注释掉 Book.Pages 属性,它可以工作,但我失去了调用 book.Pages 的能力,而不得不调用 dbcontext.Pages.Where(p => p.Book.Id == book.Id),这并不理想,因为我不希望调用代码有了解 dbcontext 对象。
有没有办法同时拥有Book.Pages 属性和级联删除?也许将两者都设置为使用相同的 FK 名称?
【问题讨论】:
标签: c# entity-framework ef-code-first entity-framework-6