c# - 如何首先在代码中启用 TPT(每种类型的表)继承中的级联删除?

标签 c# sql code-first

我将 EF 与代码优先和 TPT(每个类型的表)继承结合使用。我有以下模型:

public partial class AccountHolder
{
    public int AccountHolderId { get; set; }

    public virtual Address Detail { get; set; }  
    public virtual Nominee Nominee { get; set; }   
}

public partial class Nominee
{
    public int NomineeId { get; set; }             
}

public abstract class Address
{
    public int AddressId { get; set; }
    ...
}

public class PersonalDetail : Address
{
    public int PersonalDetailId { get; set; }
    ...
}

流畅的接口(interface):

        modelBuilder.Entity<AccountHolder>().HasOptional(p => p.Nominee)
                                            .WithRequired()
                                            .WillCascadeOnDelete();

根据 this tutorial这是 AccountHolder 和 Address 之间的多态关系。 PersonalDetail 继承Address。我的问题是,每当我删除任何 AccountHolder 时,我希望 EF 负责从 Address 和 PersonalDetail 表中删除其关联的 PersonalDetail 信息,但目前这还没有发生,任何人都可以指导我如何通过流畅的 API 或其他一些实现此行为方法 ?

编辑:

根据我使用此配置时发布的答案:

        modelBuilder.Entity<AccountHolder>().HasOptional(p => p.Detail)
                                            .WithRequired()
                                            .WillCascadeOnDelete();

为了启用级联删除,这与 AccountHolder 和 Nominee 之间现有的 1 对 1 关联冲突。异常(exception)是:

Conflicting changes detected. This may happen when trying to insert multiple entities with the same key.

最佳答案

在指定 EntityTypeConfiguration 时检查 WillCascadeOnDelete 函数

http://msdn.microsoft.com/en-us/library/gg679348(v=vs.103).aspx

在您在问题中发布的那个例子中,他们有:

modelBuilder.Entity<Customer>()
              .HasOptional(c => c.BillingAddress)
              .WithRequired();

在最后添加一个 WillCascadeOnDelete(true)(或者对于您想要级联的任何实体),这样就可以了。像这样的东西:

modelBuilder.Entity<AccountHolder>().HasOptional(a => a.Address).WithRequired().WillCascadeOnDelete(true);

关于c# - 如何首先在代码中启用 TPT(每种类型的表)继承中的级联删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15254687/

相关文章:

c# - 搜索时间时正则表达式性能不佳 (xx :xx:xx)

c# - 如何与 BED 沟通?

entity-framework - Entity Framework 按排序顺序加载子集合

c# - Entity Framework 代码优先 : How can I model a Customer/Address relationship?

c# - 如何使用循环访问 C# 中的表单元素?

c# - Windows 手机 8 : Add FrameworkElement to PanoramaItem from code behind

jquery - 无法使用jQuery将记录插入数据库

C# Property get set 不设置值

sql - MyBatis 重用查询来获取 count(*)

entity-framework - EF 5.0 简单映射的多重性错误