9

我将 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; }
    ...
}

流利的API:

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

根据本教程,这里是 AccountHolder 和 Address 之间的多态关系。PersonalDetail 继承地址。我的问题是,每当我删除任何我想要的 AccountHolder 时,EF 都会负责从 Address 和 PersonalDetail 表中删除其关联的 PersonalDetail 信息,但目前这并没有发生,任何人都可以指导我如何通过 Fluent API 或其他方式实现此行为方法 ?

编辑:

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

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

用于启用级联删除,这与 AccountHolder 和 Nominee 之间现有的 1 对 1 关联冲突。例外是:

检测到有冲突的更改。当尝试插入具有相同键的多个实体时,可能会发生这种情况。

4

1 回答 1

1

指定 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);
于 2013-03-06T18:13:27.637 回答