实体框架AddTo函数不一致?

时间:2009-01-27 20:26:21

标签: .net entity-framework

让我描述一下我得到的行为:

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

但如果我执行以下操作:

  • 从数据库加载用户:这意味着用户已附加到上下文
  • 创建一个新的对象C:
    • C tempC = new C();
    • tempC.User =先前加载的用户;
    • Context.SaveChange();
  • 创建一个与Object C有关系的新Object E.
    • E tempE = new E();
    • tempE.C =先前创建的C;
    • Context.AddToESet(tempE);

没有抛出异常。我期待一个例外,因为那时C被附加到上下文,这应该与第一个例子相同。但事实并非如此。为什么,以及如何才能保持一致?

我计划在将对象添加到集合之前检查对象的状态(EntityState == Detached),但我认为我必须做错事才能开始。

1 个答案:

答案 0 :(得分:0)

假设UserC之间存在1对多的关系,您可能希望使用不同的语法将C添加到父User。您可能希望将tempC.User = previously loaded user;添加为tempC的子级,而不是User。这就是我的意思:

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