use*_*869 5 c# entity-framework-5
我有这个DbContext对象,包括 -
- Employee
- CompanyAddress (PK: AddressFirstLine, City)
Note: one Employee can have many CompanyAddress
Run Code Online (Sandbox Code Playgroud)
仅当 CompanyAddress表中不存在某些地址时,记录才会添加到CompanyAddress表中.
如果我有两个来自数据库的DBContext对象,请说Snapshot1,Snapshot2.假设在拍摄这两个快照时,CompanyAddress表中没有记录.当对Snapshot1进行更改并保存时 - 将记录写入CompanyAddress表.
当对Snapshot2进行更改并使用保存时
mydataContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
异常发生:
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'
Run Code Online (Sandbox Code Playgroud)
似乎保存Snapshot1会使Snapshot2变脏,因为当它们保存回数据库时,两者都有相同的 CompanyAddress记录.
我可以在dbContext对象上进行哪些其他调用/设置以避免此错误?
谢谢!
tra*_*max 12
您的错误与DbContext对象无关.您的问题是您正在尝试插入具有重复主键的记录.这就是你的异常消息所说的.
看看如何创建CompanyAddress对象以及保存它们时的键 - 这将为您提供线索.
编辑:将主键作为自然键是一个坏主意,即您不应将城市和地址指定为主键.您应该将Guid或Integer作为主键,而不依赖于存储在DB中的信息.
为了强制实现唯一性,在保存到数据库之前,检查该记录是否存在,并可以根据唯一约束向数据库表添加唯一索引.
| 归档时间: |
|
| 查看次数: |
32057 次 |
| 最近记录: |