【发布时间】:2015-02-02 08:38:35
【问题描述】:
EntityFramework.dll 中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理
附加信息:附加类型的实体 'WebLanguageTeacher.Models.MyDatabase.Word' 失败,因为另一个 相同类型的实体已经具有相同的主键值。这 使用“附加”方法或设置状态时可能发生 如果图中的任何实体具有,则实体为“未更改”或“已修改” 键值冲突。这可能是因为一些实体是新的并且 尚未收到数据库生成的键值。在这种情况下使用 'Add' 方法或 'Added' 实体状态来跟踪图形和 然后将非新实体的状态设置为“未更改”或“已修改”为 合适。
看起来是这样的:
var getWordfromDB = db.Words.Find(word.ID);
word.NextReview = getWordfromDB.NextReview;
word.LastReviewed = getWordfromDB.LastReviewed;
db.Entry(word).State = EntityState.Modified;
我正在对“Word”对象进行一些更改。由于某些原因,我必须从数据库中获取数据并将其再次放入同一个对象。 不使用 Find() 方法,EntityState.Modified 可以工作,但是当我把它放在那里时,它会抛出这个错误。
如何解决?
【问题讨论】:
-
你能把
Word的课程详情发给你吗? -
我可以,但我认为这不是重点。这是带有一些字符串变量的典型类。我认为这是更多的 EF 问题
-
如果 EF 有问题,很多人比您更早发现它。您的问题详细信息不完整。我们无法在不知道细节的情况下为您提供帮助。
-
您使用
word的ID 来获取getWordFromDB,但随后您修改了word。那么getWordFromDB有什么意义(你说“出于某些原因”,什么原因)?以及如何首先获得word? -
@dotctor, WiktorZychla 这是课程和“问题”。 DateTime 存在问题,因此在从表单中获取它时,我收到 null DateTime 值。 C# 获取 datetime2 值,ef 需要 datetime 值,所以会出错。 stackoverflow.com/questions/28062192/…
标签: c# asp.net asp.net-mvc entity-framework