【发布时间】:2009-06-17 17:48:20
【问题描述】:
我正在尝试学习如何使用 Entity 框架,但遇到了一个我无法解决的问题。 我正在做的是浏览我拥有的电影列表并将每一部插入一个简单的数据库中。
这是我正在使用的代码
private void AddMovies(DirectoryInfo dir)
{
MovieEntities db = new MovieEntities();
foreach (DirectoryInfo d in dir.GetDirectories())
{
Movie m = new Movie { Name = d.Name, Path = dir.FullName };
db.AddToMovies(movie);
}
db.SaveChanges();
}
当我这样做时,我在读取的 db.SaveChanges() 处得到一个异常。
对数据库的更改是 提交成功,但报错 更新对象时发生 语境。 ObjectContext 可能在 不一致的状态。内部异常 消息:AcceptChanges 无法继续 因为对象的键值 与另一个对象冲突 对象状态管理器。确保 键值在调用之前是唯一的 接受更改。
我无法找出导致此问题的原因。
我的数据库表包含三列
Id int 自动增量
名称 nchar(255)
路径 nchar(255)
更新: 我检查了我的 edmx 文件,SSDL 部分具有建议的 StoreGeneratedPattern="Identity" 。我还关注了博客文章,并尝试按照那里的建议在 CSDL 中添加 ClientAutoGenerated="true" 和 StoreGenerated="true"。这导致了编译错误(错误 5:不允许使用“ClientAutoGenerated”属性。)。由于这篇博文来自 2006 年,并且它有一个指向后续帖子的链接,我认为它已被更改。
但是,我无法阅读后续帖子,因为它似乎需要一个 msdn 帐户。
【问题讨论】:
-
我的答案是在属性see here for more details 上设置
StoreGeneratedPattern="Identity"。 -
当您对 INSERT、UPDATE、DELETE 使用 SotredProcedure 映射并且您的 ID 密钥是 SP 内的计算密钥时,也会发生这种情况。
标签: c# .net entity-framework