代码之家  ›  专栏  ›  技术社区  ›  Alex Varela

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

  •  0
  • Alex Varela  · 技术社区  · 8 年前

    我在学习EF,我在做一个练习,我得到了三个表,其中一个文件有很多文档,这些文档有很多图像。我的表格是方便(File)、Documento(Documents)和Archivos(images)。

    我有一个表单,其中我在datagridview中列出了我的所有文件,如果您选择,一个已经存在的文件,那么您也应该能够向该文件中添加更多文档,问题是如果我添加要更新的代码,我无法做到这一点。如果尝试添加1个新文档,则不会将更改保存到db,也不会引发和异常,但如果尝试添加2个或更多,则会引发以下异常:

    “System”类型的未处理异常。EntityFramework中发生InvalidOperationException“”。动态链接库

    正在附加“Entidad”类型的实体。“Documento”失败,因为相同类型的另一个实体已具有相同的主键值。如果图形中的任何实体具有冲突的键值,则在使用“Attach”方法或将实体状态设置为“Unchanged”或“Modified”时可能会发生这种情况。这可能是因为某些实体是新的,尚未收到数据库生成的键值。在这种情况下,请使用“Add”方法或“Added”实体状态来跟踪图形,然后根据需要将非新实体的状态设置为“Unchanged”或“Modified”。

    代码如下:

    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接收的所有文档和我正在添加的文档。

    当做

    1 回复  |  直到 8 年前
        1
  •  0
  •   Alex Varela    8 年前

    我不得不改变我更新字段的方法,我这样做了,效果很好:

    if (documento.idDocumento == 0)
                        {
                            context.Documentos.Add(documento);
                        }
                        else
                        {
                            Documento updDoc = context.Documentos.FirstOrDefault(x => x.idDocumento == documento.idDocumento);
                            updDoc.NombreDocumento = documento.NombreDocumento;
                        }