我首先使用的是EF6代码,我有一个服务层,其中AutoMapper将DTO映射到实体类型(这是一个更新,因此数据库中已存在具有相同ID的对象)。我希望将更改保留到数据库中。是否可以使用EF不知道的全新对象执行更新,或者是否必须将属性值复制到EF持有引用的对象?这样做的最佳做法是什么?那导航属性呢?这些必须以同样的方式完成吗?
答案 0 :(得分:1)
如果您想要将对象专门标记为已更新且未添加(如果您刚刚将其添加到上下文中,则默认情况下EF会执行此操作),您可以这样做 - context.Entry(entity).State = EntityState 。改性。您也需要为相关实体做适当的操作,它可能会有点混乱,但它会为您保存查询到数据库以获取原始实体。
我认为没有一个适合所有情景的答案;我所研究的一个解决方案是预先指定将实体标记为已更新或添加的规则(通常基于自动增量主键为0或不是)。在具有高度关系模型的另一种情况下,查询原始对象(包括从更新的副本推断出的所有关系)以及复制更新的属性和关系(再次根据某些规则)更容易。