【问题标题】:Entity A contains Entity B, how do I Update A without inserting B (cause it already exists) EF core实体A包含实体B,如何在不插入B的情况下更新A(因为它已经存在)EF核心
【发布时间】:2021-03-05 22:42:13
【问题描述】:

所以我使用的是 EF Core 5.0.1,并且我有这个实体 A,它包含对另一个实体 B 的引用。

我想从 A 更新一个条目,因此它开始引用现有的 B,但是每当我尝试时,EF 核心都会尝试创建 B 的这个条目,就好像它是一个新条目一样,从而导致错误(重复ID)。是否可以让 EF 将此引用添加到现有 B?

实体 A:

public class Customer
{
    public string JdeNumber { get; set; }
    public string ResponsibleUnit { get; set; }
    public string Email { get; set; }
    public User RegionalManager { get; set; }
}

实体 B:

public class User
{
    public string Code { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public Group UserGroup { get; set; }
}

【问题讨论】:

  • edit 该问题还显示设置customer.RegionalManager 的代码,包括如何检索或创建RegionalManager。
  • "_but 每当我尝试时,EF 核心都会尝试 _" - 请分享您尝试但对您不起作用的代码。

标签: c# entity-framework .net-core entity-framework-core


【解决方案1】:

如果不查看您的 Update 实现,就无法提出确切的答案。但我认为您可以使用 DBContext 执行此类操作,而无需更新 RegionalManager

var customer = context.Customers.First(a => a.JdeNumber == "number_of_existing_customer");
customer.ResponsibleUnit = "Test Unit";
customer.Email = "email@example.com";
context.SaveChanges();

更多实体更新方法请见here

【讨论】:

    【解决方案2】:

    我认为这是因为您的两个 User 类之间没有任何关系。因此,通过在 Customer 类中添加 UserId 来建立 Customer 和 User 实体类之间的关系。此外,需要通过模型构建器添加相应的外键。

    【讨论】:

      猜你喜欢
      • 2021-09-03
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 2016-07-27
      • 1970-01-01
      相关资源
      最近更新 更多