2009-01-27 52 views
0

让我描述的行为,我得到:实体框架AddTo函数不一致?

  • 负载从数据库中的用户:这意味着用户被附加到上下文
  • 创建新的对象C:
    • ÇtempC =新C();
    • tempC.User =先前加载的用户;
    • Context.AddToCSet(tempC);
    • 最后一行引发异常,因为当设置属性用户时,该对象已添加到上下文中。

但如果我做到以下几点:

  • 负载从数据库中的用户:这意味着用户被附加到上下文
  • 创建新的对象C:
    • C tempC = new C();
    • tempC.User =先前加载的用户;
    • Context.SaveChange();
  • 创建具有与对象C.
    • Ê坦佩=全新E的关系的新对象E();
    • tempE.C =先前创建的C;
    • Context.AddToESet(tempE);

抛出异常。我期待着一个例外,因为那时C被附加到上下文中,这应该与第一个例子相同。但事实并非如此。为什么,我能做些什么来保持一致性?

我打算在将它添加到集合之前检查对象的状态(EntityState == Detached),但我想我一定是做错了开始。

+0

不知道,但一些代码显示你在做什么可以帮助这里。 – Odd 2009-01-28 00:56:49

回答

0

假设有一个1到许多UserC之间的关系,你可能需要使用不同的语法为C添加到父User。而不是tempC.User = previously loaded user;您可能想要将tempC作为User的子项添加。这是我的意思:

C tempC = new C(); 
(previously created user).C.Add(tempC); 
Context.AddToCSet(tempC);