EF 4.1 - 无法将一个实体与另一个现有实体关联(可空FK)

时间:2011-12-15 04:23:23

标签: c# asp.net-mvc entity-framework-4.1 poco

我正在使用Entity Framework 4.1(数据库优先,例如“old school”),我正在使用ASP.NET MVC 3 Web应用程序中的POCO。

我在FooBar之间有一个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,因此我无法从我的控制器直接访问DbContextObjectContext

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

我怀疑那是因为

  

DbContext API及其DbChangeTracker不提供更改独立关联状态的方法(我们必须将DbContext转换回ObjectContext并更改ObjectStateManager中的状态)。

以上引自Ladislav Mrnkva's blog post。尝试在BarId类中定义Foo属性,看看它是否会导致上下文正常工作。