我正在使用ASP.NET WebApi 2,并将部分关系数据库结构加载到前端网站。这允许用户对单个存储中的多个表进行更改,还可以查看一些额外的数据。
基本上效果很好。这意味着我可以在一次通话中存储更改,比如一个人的桌子及其相关的衣服和头发颜色,如下所示:
db.person.Add(person);
db.SaveChanges();问题是,我不想加载所有相关数据。所以,在鞋表可能被加载,我不希望鞋带表装载有关鞋带的信息。
我遇到的问题是,有人试图将复制的鞋表存储到数据库中,尽管加载该表只是为了让用户查看这些细节。我猜想这是因为,我使用[JsonIgnore]属性来忽略对象的某些部分--因此,当它不是这样的时候,它就会将它识别为一个新的对象。
在调用Add之前,我可以遍历对象删除任何鞋信息,但这会很慢。
也许最好是发布第二个对象,该对象只包含已更改的项(在前端跟踪这些项之后)。有更好的办法吗?
发布于 2015-05-06 10:26:27
当您在EF中使用DbSet<T>.Add()时,实体(或者树中的所有实体,如果它是一个具有相关子实体的实体)作为Added附加到DbContext。这意味着当您调用SaveChanges时,EF将尝试插入数据库中的所有对象。这就是为什么你会有复制问题。
您需要学习如何使用EF在断开模式下工作。基本上,您需要跟踪每个实体的状态(即,如果必须插入、删除或更新这些实体时进行控制),并在将实体附加到上下文中时设置正确的状态。
在EF中查找有关处理断开连接的实体的文档,例如:
这些将解释如何处理断开连接的实体。
https://stackoverflow.com/questions/30072142
复制相似问题