繁体   English   中英

在 Entity Framework Core 中保存实体而不更新关系

[英]Saving an Entity without updating relations in Entity Framework Core

是否有适当的方法在不触及关系的情况下更新 ef-core 中的实体? 换句话说,我可以忽略更新中的字段吗?

例如,我有一个 API,客户端可以在其中请求 Person 对象。 此发送的 PersonDto 将不包含任何FinanceData 如果客户端发回更新的数据,它应该将其写入数据库,而不删除FinanceData关系。

public class Person {
  public Guid Id {get,set;}
  public string Name {get;set;}
  public IList<Relation> Relations {get;set;}
  public Adress Adress {get;set;}
  public ICollection<FinanceData> Finances {get;set;}
}

我知道我可以读取带有 Id 的对象并将字段逐个写入跟踪的实体。 但这感觉不对,我希望有更好的解决方案。 我尝试使用_context.Entry(person.Finances).State = EntityState.Unchanged; _context.SaveChangesAsync(); 但它会引发以下异常:

System.InvalidOperationException: The entity type 'List<FinanceData>' was not found. Ensure that the entity type has been added to the model. 

有没有一种正确的方法可以在不从数据库中读取实体的情况下进行此更新?

我使用与您类似的方法,我可以提出一些建议。

首先是我使用_context.Entry(person.Finances).State = EntityState.Unchanged; 你提到的方法,但我使用Detached而不是Unchanged来处理这种事情。 这不会解决您的问题,因为您尝试为实体集合而不是相关实体设置实体状态,因此您遇到的错误......您必须为集合的每个成员执行此操作。

我在代码中看到的另一个区别是,对于相关实体的集合,我总是将它们声明为virtual 不确定这是否对您有任何好处。 然后我自己处理这些实体的插入或更新,在你的情况下不通过Person实体。 然后,在您的更新中,我会将Finances属性设置为null ,并且我不必对它做任何事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM