0

リポジトリパターンと作業単位でEFを使用しています。私は、内部オブジェクト雇用を持つオブジェクト人を引っ張っています。クラスの構成方法は次のとおりです。

    class Person
    {
       Employment employments;
    }

   class Employment
   {
          int ID {get;set;}
          string Employer {get;set;}
   }

遅延読み込みが有効になっています。以下は、Personオブジェクトを取得する方法です。

     Person p;
     using (unitOfWork = new UnitOfWork())
     {
        p=unitOfWork.PersonRep.Single(s => s.Id== Id);
     }
   return p;

このコードの外では、p.employmentsにアクセスできません。このアーキテクチャのベストプラクティスは何ですか?そして、なぜナビゲーションプロパティが持続しないのですか?

4

1 に答える 1

0

ナビゲーションプロパティがエラーを引き起こしている理由は、ナビゲーションプロパティが読み込まれる前に、コンテキストを破棄しているためです。

あなたが何が起こっているかについて考えるならば:

  • データベース接続を開き、personオブジェクトを取得しています。
  • 次に、この接続を閉じます。
  • 次に、あなたはあなたの雇用主である人物オブジェクトに尋ねますか?データベースに戻ろうとしますが、接続が存在せず、切断されます。

includeを使用して、あなたの人の雇用主を熱心にロードする必要があります。あなたのコンテキストからはcontext.Persons.Include(p => p.employments)、そのコードが投稿されていないため、わかりにくいようなものになります。

または、データベース接続をより長く維持します。その人の雇用主情報にアクセスすることは、すべて同じユニットで処理されるように思われるので、メソッド全体を通して作業ユニットを存続させることを検討する必要があるかもしれません。

于 2012-09-27T14:13:19.770 に答える