首页 > 解决方案 > 如何留下孤立数据?

问题描述

使用 Visual Studio 2017、C#、Entity Framework .Net 6.2.0

我有一个设置,其中一个表 ( LOG) 具有另一个表 () 的外键BAR。我想删除一个条目,BAR同时保持条目和外键不变LOG

public class LOG
{
    [Key]
    public int id { get; set; }
    public string statusLog { get; set; }
    public virtual BAR bar { get; set; }
}

public class BAR
{
    [Key]
    public int id { get; set; }
    public string data { get; set; }
}

然后我尝试删除一个条目。

BAR bar1 = DBContext.BARs.Where(b => b.id == enteredID).First();
DBContext.BARs.Remove(bar1);
DB.Context.SaveChanges();

并得到这个异常

DELETE 语句与 REFERENCE 约束“FK_dbo.LOG_dbo.BARs_BAR_id”冲突。冲突发生在数据库 \"*******\"、表 "dbo.LOG"、列 'BAR_id' 中。

该语句已终止

如何在BAR将条目保留在表格中的同时从表格中删除条目LOG?即使在我的系统中添加和删除条目时,我也希望数据显示我的日志记录表中发生的情况。

标签: c#.netvisual-studio-2017entity-framework-6

解决方案


从纯粹的实体框架的角度来看,使用Nullable 外键

例子

public class LOG
{
    [Key]
    public int id { get; set; }
    public string statusLog { get; set; }
    public int? BarId{ get; set; }
    public virtual BAR bar { get; set; }
}

需要考虑的事项:

尽管 SQL Server 支持它,但 EF 无法设置级联规则以在删除相关对象时使 FK 无效。

删除时Bar,您需要将它们Logs加载到内存中以使它们为空...

查看任意数量的相关问题以解决此问题

删除可选相关实体时如何将 FK 更新为 null


推荐阅读