我有这个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对象进行哪些其他调用/设置来避免此错误?
谢谢!
最佳答案
您的错误与DbContext对象无关。您的问题是您试图插入具有重复主键的记录。这就是您的异常消息所说的。
查看如何创建CompanyAddress对象以及保存它们时要使用的键-这将为您提供线索。
编辑:并且将主键设置为自然键是个坏主意,即您不应将城市和地址指定为主键。您应该使用Guid或Integer作为主键,而不依赖于存储在DB中的信息。
为了实现唯一性,在保存到数据库之前,您需要检查该记录是否存在,并可以根据唯一性约束将唯一索引添加到数据库表中。
关于c# - 如何避免System.Data.Entity.Infrastructure.DbUpdateException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20762923/