0

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;

誰が私が間違っているのか教えてもらえますか? 投稿されたモデルをフォローしようとしましたが、明らかに何かが欠けています...

ありがとう!

4

1 に答える 1

0

手作業で行わなければならなかったメタデータのメタデータ型属性 (何らかの理由で、RIA はデフォルトでサブクラスのメタデータを作成しないため) の型が間違っていました。うっかり読んだ:

[MetadataTypeAttribute(typeof(MultipleChoiceItem.ContentMetadata))]

そして読むべきだった:

[MetadataTypeAttribute(typeof(MultipleChoiceItem.MultipleChoiceMetadata))] 

サブクラス用に生成されたメタデータがないという事実は、非常に厄介です。

とにかく、他の誰かがこの問題を抱えている場合に備えて、ここに投稿してください!

于 2010-09-07T17:36:07.893 に答える