foreach (var item in order.MyFiles)
{
var newFile = adapter.db.File.CreateObject();
newFile.Name = item.FileName;
adapter.db.File.AddObject(newFile);
adapter.db.SaveChanges();
item.MyFile.Add(new MyFile { FileID = newFile.FileID });
adapter.db.SaveChanges();
}
foreach (var item in tempFilesList)
{
adapter.db.DeleteObject(item);
}
adapter.db.SaveChanges();
该代码复制了 MyFile
表中的行,例如,如果循环迭代 3 次,我看到 6 行(3 x 2*adapter.db.SaveChanges()
? ??)
但是,如果我只有一个 adapter.db.SaveChanges();
(最后一个),我会得到错误
无法确定“my_dbModel.FK_MyFile_File”关系的主体端。多个添加的实体可能具有相同的主键。
我想这是因为在那种情况下它没有提交 adapter.db.File.AddObject(newFile);
项目,然后才将它们分配给 item.MyFile.Add (new MyFile { FileID = newFile.FileID });
但我可能是错的,有什么解决办法吗?
最佳答案
在保存更改之前定义新的 MyFile
时,您不能使用 newFile.FileID
。在将新实体保存在数据库中之前,FileID 为默认值 (0)。您必须在 MyFile
类中使用 File
的导航属性。 EF 将检测该关系并适本地提交数据。
尝试更改 item.MyFile.Add(new MyFile { FileID = newFile.FileID });
行:
item.MyFile.Add(new MyFile { File = newFile });
其中 File
是在 MyFile
实体中定义的导航属性。
关于C#无法确定关系的主体端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11893673/