我正在学习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;
}