我正在学习EF,并且正在做一个练习,我得到了三个表,其中一个文件包含很多文档,而这些文件包含很多图像。我的表格是Expediente(文件),Documento(文档)和Archivos(图像)。
我有一个表单,其中我在datagrid中列出了我所有的文件,如果您选择一个已经存在的文件,那么您应该也可以在该文件中添加更多文档,但是如果我添加代码,我将无法执行更新。如果尝试添加1个新文档,则没有任何反应不会保存对db的更改,也不会引发异常,但是如果我尝试添加2个或更多,它将引发以下异常:
EntityFramework.dll中发生类型为'System.InvalidOperationException'的未处理异常
附加类型为'Entidad.Documento'的实体失败,因为相同类型的另一个实体已经具有相同的主键值。如果图形中的任何实体具有冲突的键值,则在使用“附加”方法或将实体的状态设置为“不变”或“修改”时,可能会发生这种情况。这可能是因为某些实体是新实体,尚未收到数据库生成的键值。在这种情况下,请使用“添加”方法或“已添加”实体状态来跟踪图形,然后根据需要将非新实体的状态设置为“未更改”或“已修改”。
代码如下:
foreach (var documento in documentos)
{
if (documento.idDocumento == 0)
{
context.Documentos.Add(documento);
}
else
{
var entry = context.Entry(documento);
if (entry.State == EntityState.Detached || entry.State == EntityState.Modified)
{
context.Documentos.Attach(documento);
}
}
}
附加文档时显示错误。
这只是一个返回void的函数,它仅用于保存,它接收BindingList,其中包含从db接收的所有文档以及我要添加的所有文档。
问候!
好吧,我不得不更改更新字段的方法,但这样做却行得通:
if (documento.idDocumento == 0)
{
context.Documentos.Add(documento);
}
else
{
Documento updDoc = context.Documentos.FirstOrDefault(x => x.idDocumento == documento.idDocumento);
updDoc.NombreDocumento = documento.NombreDocumento;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句