gpt4 book ai didi

entity-framework - 删除导航属性不会更新数据库

转载 作者:行者123 更新时间:2023-12-04 14:47:10 24 4
gpt4 key购买 nike

我有 2 个 POCO 类(如下)并希望删除它们的两个记录之间的链接。根据 this EF 5.0 应该能够在不加载 User 类的情况下处理删除,如下所示:

context.Computers.Find("test").User = null;
context.SaveChanges();

这不起作用,但使用 .net 4 批准的方法可以工作:
en = context.Computers.Find("test");
context.Entry(en).Reference(e => e.User).Load();
en.User = null;
context.SaveChanges();

我的 EF 引用是 EntityFramework.dll 版本 5.0.0.0。我在这里遗漏了一些明显的东西吗?

以下是类(class):
public class Computer
{
public string Id { get; set; }
public Nullable<int> UserId { get; set; }
public virtual User User { get; set; }
}
public class User
{
public int Id { get; set; }
public virtual ICollection<Computer> Computers { get; set; }
}

编辑:以下是上述链接文章中似乎与我所看到的功能不一致的特定行:

要删除关系,请将导航属性设置为 null。如果您正在使用基于 .NET 4.0 的 Entity Framework ,则需要在将其设置为 null 之前加载相关端。例如:
context.Entry(course).Reference(c => c.Department).Load();
course.Department = null;

从基于 .NET 4.5 的 Entity Framework 5.0 开始,您可以将关系设置为 null,而无需加载相关端。

最佳答案

您没有看到关系被删除,因为您的代理不是更改跟踪代理,而只是延迟加载代理。要使其成为更改跟踪代理,您需要将所有属性设置为虚拟。请在下面找到一个示例,该示例无需先加载即可重置导航属性。现在的问题是是否使用更改跟踪代理 - 参见 this post因为它包含对此的有趣讨论。

public class Computer
{
public virtual string Id { get; set; }
public virtual Nullable<int> UserId { get; set; }
public virtual User User { get; set; }
}

public class User
{
public int Id { get; set; }
public virtual ICollection<Computer> Computers { get; set; }
}

public class MyContext : DbContext
{
public DbSet<Computer> Computers { get; set; }
public DbSet<User> Users { get; set; }
}

class Program
{
static void Main(string[] args)
{
using (var ctx = new MyContext())
{
if (!ctx.Computers.Any())
{
var user = ctx.Users.Add(new User());
ctx.Computers.Add(new Computer() { Id = "MyComputer", User = user });
ctx.SaveChanges();
}
}

using (var ctx = new MyContext())
{
var computer = ctx.Computers.Single();
computer.User = null;
ctx.SaveChanges();
}

using (var ctx = new MyContext())
{
var computer = ctx.Computers.Include("User").Single();
Console.WriteLine(computer.User == null);
}
}
}

关于entity-framework - 删除导航属性不会更新数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14509597/

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