我有一个DbContext对象,它包括-
- Employee
- CompanyAddress (PK: AddressFirstLine, City)
Note: one Employee can have many CompanyAddress只有在CompanyAddress表中不存在某些地址时,才会将记录添加到CompanyAddress表中。
如果我有两个来自数据库的DBContext对象,比如Snapshot1,Snapshot2。假设当这两个快照都被拍摄时,CompanyAddress表中没有记录。当对Snapshot1进行更改和保存时-记录将写入CompanyAddress表。
当对Snapshot2进行更改并使用
mydataContext.SaveChanges();例外情况发生:
System.Data.Entity.Infrastructure.DbUpdateException: An error occurred while updating the entries
System.Data.SqlClient.SqlException: Violation of PRIMARY KEY constraint 'PK_CompanyAddress'. Cannot insert duplicate key in object 'dbo.CompanyAddress'Snapshot1的保存似乎使Snapshot2变得很脏,因为当它们被保存回数据库时,两者都有相同的CompanyAddress记录。
我还可以对dbContext对象进行哪些其他调用/设置以避免此错误?
谢谢!
发布于 2013-12-24 18:01:07
您的错误与DbContext对象无关。您的问题是,您正在尝试使用复制主键插入记录。你的异常信息就是这么说的。
看看如何创建CompanyAddress对象,以及保存它们时的键是什么--这将为您提供线索。
编辑:,将主键设置为自然密钥是个坏主意,即不应该将城市和地址指定为主键。您应该将Guid或Integer作为不依赖于存储在DB中的信息的主键。
为了执行唯一性,在保存到DB之前,检查该记录是否存在,并可以根据唯一约束向数据库表添加唯一索引。
https://stackoverflow.com/questions/20762923
复制相似问题