2011-12-15 5 views
3

私はEntity Framework 4.1(データベース "first old"など)を使い、ASP.NET MVCでPOCOを使用しています3ウェブアプリ。 Fooテーブルの上にNULL可能int型に裏打ちされたFooBar間0..1の関係、 -EF 4.1 - 1つのエンティティを他の既存のエンティティと関連付けることができません(Nullable FK)

私は1を持っています。このような

マイPOCOのルック:

public class Foo 
{ 
    public Bar Bar { get; set; 
} 

public class Bar 
{ 
    public int BarId { get;set; } 
} 

は今、私はすでにシステムに存在するFooを持っていますが、BarIdはnullです。

これで、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

Fooクラスに「BarID」が必要ですか? – Matthew

+0

@Matthew - 質問にあるように、私は何もしていないのですか? – RPM1984

+0

@Matthew - 実際には私はいない**私のFooクラスでそれを持っています。それは必要ありません。 – RPM1984

答えて

3

は私が

DbContext APIとそのDbChangeTrackerは、独立協会の状態を変更する方法を提供していないので、それはだ疑い(我々は戻ったObjectContextにDbContextを変換し、ObjectStateManagerで状態を変更する必要があります)。

上記は、Ladislav Mrnkva's blog postから引用した。 FooクラスにBarIdプロパティを定義し、コンテキストが正しく機能するかどうかを確認してください。

+0

うん、モデルに 'BarId'を追加して、単純にそのプロパティを値に設定することはやりました。ありがとう! – RPM1984

関連する問題