我的问题似乎与this one相似,但多年来确切的细节和解决方案似乎都有所改变。 (首先,接受的答案中引用的ObjectStateManager
显然不再可访问。)
我有一个显示对象图的Web应用程序。图中的一个对象是列表。用户可以编辑列表中的项目。他们还可以添加新项目。当他们保存更改时,我会序列化整个对象图(包括指示是否添加或修改值的字段)并将其发送到控制器以更新数据库。我发送带有未初始化ID的添加项目。在控制器中,我反序列化对象图并将其传递给DbContext#Attach()
。然后我在调用SaveChanges()
之前设置附加条目的实体状态。
这适用于任意数量的已更改行,并且可以使用单个添加的行。插入行时,数据库会分配ID。但是Attach()
不接受具有相同未初始化ID的多个添加行。
有没有办法抑制Attach()
中ID的验证?似乎EF应该将其留给数据库。如果做不到的话,我应该怎么做呢?