0

私は Asp.net MVC Web サイトを持っています。この Web サイトでは、データ ストアでエンティティ フレームワークを使用してデータベースにアクセスしています (POCO エンティティを使用)。

理由はわかりませんが、遅延読み込みが行われていないように見えることがあります。

動作しないコードの例:

using(BusinessEntities context = new BusinessEntities()){
   User user = context.Users.First(u=>u.Id == parameterId);
   foreach(Post post in user.Posts){//user.Posts is null here and thrown an exception
      //.. doing some things
   }
}

しかし、私がこれを行うと、完全に機能します

using(BusinessEntities context = new BusinessEntities()){
   User user = context.Users.Include("Posts").First(u=>u.Id == parameterId);
   foreach(Post post in user.Posts){//user.Posts is null here and thrown an exception
      //.. doing some things
   }
}

しかし、遅延読み込みが機能しない理由がわかりません。

  • コンテキストは破棄されません
  • プロジェクトの匿名オブジェクトなどではありません
  • 私のコードには、これを示す必要のない場所がたくさんあることを知っています.Include と相対的な作業を行う
  • edmx モデルで Lazy Loading Enabled を True に設定しました

何がこの動作につながる可能性がありますか?

4

2 に答える 2

1

EF によって作成されたプロキシ エンティティがプロパティを遅延読み込みできるように、Postsプロパティを宣言します。virtual

于 2012-05-09T10:49:24.340 に答える
0

インクルード内でのマジック ストリングの使用を停止するには、 http://www.microsoft.com/download/en/details.aspx?displaylang= en&id= 8363 から EF 4.1 をインストールしてください。追加

using System.Data.Entity;

あなたのusingステートメントに。

次に、次のクエリを記述します。

using(BusinessEntities context = new BusinessEntities()){
   var user = context.Users.Include(p=>p.Posts).FirstOrDefault(u=>u.Id == parameterId);
   if(user != null)
   {
      foreach(Post post in user.Posts)
      {
         //.. do something
      }
   }
}

詳細については、次のhttp://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entitiesを参照してください。 .aspx

于 2012-05-07T07:56:40.847 に答える