gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:59:31 25 4
gpt4 key购买 nike

我将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com