Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用EF Upsert逻辑和从DB检索的内部对象的FK冲突_C#_Entity Framework_Upsert - Fatal编程技术网

C# 使用EF Upsert逻辑和从DB检索的内部对象的FK冲突

C# 使用EF Upsert逻辑和从DB检索的内部对象的FK冲突,c#,entity-framework,upsert,C#,Entity Framework,Upsert,所以我在我的项目中实施EF。在我的单元测试中,我遇到了一个我自己无法解决的问题 我有 class Employee{ Guid uid name: "Foo"; Department: dempartmentObj; } class department{ Guid uid name: "food prep"; desc: "preps food"; } 现在,作为该计划逻辑的一部分,我正在创建一名新员工,并将他们与新部门联系起来 所以我 然后使用upsert逻辑保存代码用于修

所以我在我的项目中实施EF。在我的单元测试中,我遇到了一个我自己无法解决的问题

我有

class Employee{
   Guid uid
name: "Foo";
Department: dempartmentObj;
}

class department{
    Guid uid
name: "food prep";
desc: "preps food";
}
现在,作为该计划逻辑的一部分,我正在创建一名新员工,并将他们与新部门联系起来

所以我

然后使用upsert逻辑保存代码用于修改而不是添加的事件

context.Entry(x).state = x.uid == guid.empty ?
      EntityState.Added: EntityState.Modified;

if(x.uid == Guid.Empty)
          x.uid = Guid.newGuid();

context.SaveChanges();
通过单元测试,我已经确认在创建新员工和部门时它都能工作


但是,在检索Inner对象时,我在试图保存新员工时遇到主键冲突…

您是否尝试调用
SaveChanges()
两次?,“创建您的部门”>“保存更改”>“创建您的员工”>“保存更改”。如果成功,则意味着关系出现问题,员工无法从部门获取FK。@kondas我可以独立保存每个对象并进行更新(检索时)但是,当创建新的外部对象并从数据库检索内部对象时,我收到了错误。您需要更新您的问题并提供更具体的代码、您的实际类,如果您先使用代码,还需要使用上下文代码,以便我们能更好地为您提供帮助。具体的例外情况是什么?。您的“外部”定义是否附加到上下文中,或者您是否将其条目设置为未更改?
context.Entry(x).state = x.uid == guid.empty ?
      EntityState.Added: EntityState.Modified;

if(x.uid == Guid.Empty)
          x.uid = Guid.newGuid();

context.SaveChanges();