2011-12-15 73 views
3

我正在使用实体框架4.1(数据库第一,例如“旧学校”),并且我在ASP.NET MVC中使用POCO 3网络应用程序。EF 4.1 - 不能将一个实体与另一个现有实体相关联(可空值FK)

我已经有了一个1 - FooBar之间0..1关系,由可空INTFoo表支持。

我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 }; 

E.g的“存根技术”,但是在EF抱怨空列(因为再次,它试图创建一个“新”酒吧)。

我确定我以前做过这个 - 我只是希望解决方案结束后我不会“使用SP”。

正如我所说 - 我使用POCO的,所以我没有直接访问我的控制器中的DbContextObjectContext

有什么建议吗?

+0

你需要在你的Foo类中使用“BarId”吗? – Matthew 2011-12-15 04:41:25

+0

@Matthew--我在做,就像在问题中一样..除非你的意思是别的吗? – RPM1984 2011-12-15 04:45:43

回答

3

我怀疑这是因为

的DbContext API及其DbChangeTracker不提供一种方法来改变独立相关的状态(我们必须转换的DbContext回ObjectContext的和改变ObjectStateManager的状态)。

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

相关问题