C#无法确定关系的主体端

标签 c# entity-framework

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/

相关文章:

c# - 使用 System.Reactive.Linq 订阅第一个事件发生并取消

c# - 异步更新数据库

c# - 无法加载文件或程序集工具\EntityFramework .PowerShell.Utility.dll'

sql - INSERT statement conflict with the FOREIGN KEY constraint 冲突发生在数据库中

asp.net-mvc - 实体类型 ApplicationUser 不是当前上下文模型的一部分。在项目开始时使用了两个不同的数据库

c# - 在 ASP.NET Core 模型绑定(bind)中使用 Required 和 JsonRequired 与 JSON 主体

C#获取电脑MAC地址 "OFFLINE"

javascript - Asp.Net 中的确认框

c# - .NET Entity Framework 核心

wpf - 涉及 ViewModel 或 Model 中数据(来自 DB)处理的逻辑?