EF4 モデルに、具象サブクラス MultipleChoiceItem を持つ抽象 Content エンティティがあります。MultipleChoiceItem の場合、Options と呼ばれる MultipleChoiceItem エンティティの Navigation プロパティによってアクセスされる関連テーブルがあります。MultipleChoiceItem を取得している場合は、常に Options が必要になるため、Options の結果をeager-loadしたいと思います。しかし、私はこれを機能させることができないようです。これが私が基本的にやったことです:
MultipleChoiceItem はサブクラスであるため、デフォルトで作成されたメタデータを取得しませんでした。そこで、次のようなメタデータ クラスを作成しました。
[MetadataTypeAttribute(typeof(MultipleChoiceItem.ContentMetadata))] public partial class MultipleChoiceItem { internal sealed class MultipleChoiceItemMetadata { ... other stuff ... [Include] public EntityCollection<McOption> Options { get; set; } ... other stuff ... }
次に、ContentService に次のような新しいクエリを作成しました。
public IQueryable<Content> GetMultipleChoiceItems() { return this.ObjectContext.Contents.OfType<MultipleChoiceItem>() .Include("Options"); }
単体テストでは、次のように呼び出しています。
context = new ContentContext();
var loadOperation = context.Load(context.GetMultipleChoiceItemsQuery());
loadOperation.Completed += new EventHandler(CompletedHandler);
CompletedHandler に入ると、次のコードでは Options プロパティが読み込まれていないように見えます。実際には、Options.Count == 4 である必要があるのに 0 になっています (基になるデータ ストアをチェックして確認)。
MultipleChoiceItem mci = context.Contents.First(c => c.ContentId == mciId) as MultipleChoiceItem;
誰が私が間違っているのか教えてもらえますか? 投稿されたモデルをフォローしようとしましたが、明らかに何かが欠けています...
ありがとう!