实体框架代码第一个引用约束问题

本文关键字:约束 问题 引用 第一个 框架 代码 实体 | 更新日期: 2023-09-27 18:37:15

我的模型出现问题并试图删除记录。我已经缩小了它以尝试显示我遇到的问题

我有一个名为 CollectedBags 的实体,带有 ID 和名称。

然后,我有一个名为BankingRun的实体,其中包含CollectedBags列表

public virtual List<CollectedBags> Bags { get; set; }

此模型会自动添加两者之间的关系,并在数据库中向 collectbag 添加一列以引用 BankingRun。

当我想删除 BankingRun 而完全不影响 CollectBag 表时,就会出现问题。CollectBags记录并不总是属于BankingRun。我尝试删除记录的任何内容显然都会导致两个表之间的冲突,但我缺乏对实体框架的了解,这使我无法编写一些 SQL 来物理删除 CollectBag 中的银行运行 ID

public class CollectedBags
{
    public long CollectedBagsId { get; set; }
    public string Name { get; set; }
}
public class BankingRun
{
    public long BankingRunId { get; set; }
    public DateTime DateTimeVisited { get; set; }
    public virtual List<CollectedBags> Bags { get; set; }
}

然后,我正在尝试删除使用多个CollectBags创建BankingRun的BankingRun。

实体框架代码第一个引用约束问题

使用 Fluent API 使用以下代码:

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
    modelBuilder.Entity<User>()
        .HasOptional(a => a.UserDetail)
        .WithOptionalDependent()
        .WillCascadeOnDelete(false);
    }

这只是一个例证,但这里重要的是.WillCascadeOnDelete(false);

基本上,当您删除一个实体时,它将防止所有其他相关实体也被删除。