0

Entity Frameworkに付属の新しいプロジェクトを使用するようにプロジェクトを更新しましたVS2012。しかし、私はいくつかの問題に遭遇しました。そのため、私のコードは例外をスローしています。

VS2010バージョンではEntity Framework、を呼び出す前に、を作成または変更し、Entityそのナビゲーションプロパティを使用することができました。SaveChanges()

例:請求書のコレクションを持つクライアントのNavigationプロパティ。

Client c = new Client();
Invoice I = new Invoice();
c.Invoices.Add(I);

そうすれば、Invoice.Client実際に問題なく保存する前に、コードのどこかで使用できるようになります。今Invoice.Client == null

同様に設定I.Client = Cでは、I下に表示されませんC.Invoices

私はここで何が欠けているのですか、それともこれは単にどうEntity Framework 5ですか?

編集

VS2010、新しいプロジェクトを作成し、同じものを追加するDataSourceと、次のコードが期待どおりに機能しました。

Client C = new Client();
C.Name = "Test";
Invoice I = new Invoice();
C.Invoices.Add(I);
MessageBox.Show(I.Client.Name);

まったく同じことをしましたが、VS2012サイコロはありませんでした。

4

1 に答える 1

0

上記の例では、実際にはコンテキストに接続されていません。

EFの後方参照は、DetectChangesの結果として実行されるfixupsと呼ばれるプロセスを介してのみ入力されます。このプロセスは、(この場合は)IDbSet <>。Add()によってトリガーされます。

請求書を追加する前にクライアントをコンテキストにアタッチするようにコードを変更すると、期待される動作が表示されるはずです。

編集:

DB First(.edmx)でこの機能を実際に使用したことはありませんが、2010年に以下のモデルタイプを使用して有効にすることができます。

このモデルタイプは、STEが非推奨になったため、2012年に削除されました。(私の理解では、これらは下位互換性のために引き続き機能するため、2010年から2012年にプロジェクトをアップグレードする場合でも、そのモデルを使用できます)

自己追跡エンティティ

于 2012-09-19T03:58:38.203 に答える