我正在使用Entity Framework 4.1(数据库优先,例如“old school”),我正在使用ASP.NET MVC 3 Web应用程序中的POCO。
我在Foo
和Bar
之间有一个1 - 0..1的关系,由Foo
表上的可以为空的支持。< / p>
我的POCO看起来像这样:
public class Foo
{
public Bar Bar { get; set;
}
public class Bar
{
public int BarId { get;set; }
}
现在,系统中已存在Foo
,但BarId
为空。
现在我正在尝试将Foo
与现有的Bar
相关联。
这是我得到的代码:
var existingBar = _repo.GetBar(2);
var existingFoo = _repo.GetFoo(1);
existingFoo.Bar = existingBar;
但在幕后,EF正在添加新 Bar
。为什么呢?
我也试过这个:
existingFoo.Bar = new Bar { BarId = 2 };
例如“存根技术”,但导致EF抱怨空列(因为它再次尝试创建一个“新”栏)。
我确信我之前已经这样做了 - 我只希望我最终选择的解决方案不是“使用SP”。
正如我所提到的 - 我正在使用POCO,因此我无法从我的控制器直接访问DbContext
或ObjectContext
。
有什么建议吗?
答案 0 :(得分:3)
我怀疑那是因为
DbContext API及其DbChangeTracker不提供更改独立关联状态的方法(我们必须将DbContext转换回ObjectContext并更改ObjectStateManager中的状态)。
以上引自Ladislav Mrnkva's blog post。尝试在BarId
类中定义Foo
属性,看看它是否会导致上下文正常工作。