如果有更新代码,则无法添加更多寄存器

亚历克斯·瓦雷拉

我正在学习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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章