【发布时间】:2015-02-16 17:29:09
【问题描述】:
我在 asp.net MVC 5 (vb.net) 中使用实体框架来存储一些数据,包括图像 (png)。图像可以作为 Byte() 保存到数据库中,但是一旦我编辑任何现有实体而不上传新图像,存储的图像就会被删除。所以我尝试了this 并在编辑控制器中编写了以下代码:
If ModelState.IsValid Then
If Request.Files("Image").ContentLength <> 0 Then
dbModel.Image = dbModel.ImageToByte(Request.Files("Image")) 'Function to create Byte() --> this works
Else
dbModel.Image = db.Content.Find(dbModel.ID).Image 'This line is responsible for the exception
End If
db.Entry(dbModel).State = EntityState.Modified 'Here the exception occours!
db.SaveChanges()
Return RedirectToAction("Index")
End If
在 EntityState 设置为 Modified 的行中,发生了异常:
EntityFramework.dll 中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理
附加信息:附加类型为“myDatabase.dbModel”的实体失败,因为同一类型的另一个实体已经具有相同的主键值。如果图中的任何实体具有冲突的键值,则在使用“附加”方法或将实体的状态设置为“未更改”或“已修改”时,可能会发生这种情况。这可能是因为某些实体是新实体,尚未收到数据库生成的键值。在这种情况下,使用“添加”方法或“已添加”实体状态来跟踪图形,然后将非新实体的状态设置为“未更改”或“已修改”。
我猜,从数据库中加载现有图像的那一行是导致异常的原因,但我真的不知道该怎么办。
【问题讨论】:
-
您可能可以删除整行
db.Entry(dbModel).State = EntityState.Modified,因为我假设dbModel已被跟踪,因此EF 将在您修改它时存储其更改。但是你有没有考虑过分表? -
@GertArnold:感谢您对拆分表的提示。我试图删除这一行,但现在数据库没有更新。
标签: asp.net-mvc vb.net entity-framework