首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免System.Data.Entity.Infrastructure.DbUpdateException

如何避免System.Data.Entity.Infrastructure.DbUpdateException
EN

Stack Overflow用户
提问于 2013-12-24 15:01:26
回答 1查看 39K关注 0票数 6

我有一个DbContext对象,它包括-

代码语言:javascript
复制
- Employee
- CompanyAddress  (PK: AddressFirstLine, City)
Note: one Employee can have many CompanyAddress

只有在CompanyAddress表中不存在某些地址时,才会将记录添加到CompanyAddress表中。

如果我有两个来自数据库的DBContext对象,比如Snapshot1,Snapshot2。假设当这两个快照都被拍摄时,CompanyAddress表中没有记录。当对Snapshot1进行更改和保存时-记录将写入CompanyAddress表。

当对Snapshot2进行更改并使用

代码语言:javascript
复制
mydataContext.SaveChanges();

例外情况发生:

代码语言:javascript
复制
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对象进行哪些其他调用/设置以避免此错误?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-24 18:01:07

您的错误与DbContext对象无关。您的问题是,您正在尝试使用复制主键插入记录。你的异常信息就是这么说的。

看看如何创建CompanyAddress对象,以及保存它们时的键是什么--这将为您提供线索。

编辑:,将主键设置为自然密钥是个坏主意,即不应该将城市和地址指定为主键。您应该将Guid或Integer作为不依赖于存储在DB中的信息的主键。

为了执行唯一性,在保存到DB之前,检查该记录是否存在,并可以根据唯一约束向数据库表添加唯一索引。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20762923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档