EF 4.1 -不能将一个实体与另一个现有实体(可空的FK)关联

本文关键字:实体 另一个 关联 FK 一个 不能 EF | 更新日期: 2023-09-27 18:17:50

我正在使用实体框架4.1(数据库第一,例如"老派"),我在ASP中使用poco。. NET MVC 3 web应用。

我有一个1 - 0..FooBar之间有1个关系,在Foo表上有一个可空的int

我的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从我的控制器。

任何建议吗?

EF 4.1 -不能将一个实体与另一个现有实体(可空的FK)关联

我怀疑这是因为

DbContext API和它的DbChangeTracker没有提供改变独立关联状态的方法(我们必须将DbContext转换回ObjectContext并在ObjectStateManager中改变状态)。

以上摘自Ladislav Mrnkva的博客文章。试着在Foo类中定义BarId属性,看看它是否能使上下文正常工作。