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



我正在学习EF,我正在进行一个练习,其中有三张桌子,一个文件中有很多文档,这些文档具有许多图像。我的表格是preenpente(file),documento(documents)和archivos(images)。

我有一个表格,我在datagridview中列出了所有文件,如果您选择了一个已经存在的文件,那么您应该可以在该文件中添加更多文档将我的代码添加到更新。如果尝试添加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的函数,它只是为保存而起作用,它收到一个包含从DB和我添加的文档收到的所有文档的绑定清单。

问候!

好吧,我不得不更改更新我的字段的方法,然后才起作用:

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

最新更新