0

Silverlight RIA サービスを使用して EF Code First でオブジェクトをネストしました。サービス側でデータを取得できますが、クライアント側で見ると子オブジェクトは null です。何が悪いのか教えてください。

[HasSelfValidation]
public class Batch
{

    public int BatchId { get; set; }
    public string BatchName { get; set; }
    [Include]
    [Composition]
    [Association("FK_Batch_BathSetItemSet", "BatchId", "BatchSetIdItemSetId")]
    public virtual ICollection<BatchSetItemSet> BatchSetItemSets { get; set; }
 }
public class BatchSetItemSet
{

    public int BatchSetIdItemSetId { get; set; }
    public int BatchId { get; set; }
    public Nullable<int> ItemSetId { get; set; }
    public string CreatedBy { get; set; }
    public  Batch Batch { get; set; }
     [Include]
     [Composition]
     [Association("FK_BathSetItemSet_ItemSet", "BatchSetIdItemSetId", "ItemSetId")]
    public  ItemSet ItemSet { get; set; }
}
public class ItemSet
{

    public int ItemSetId { get; set; }
    public int CustodianId { get; set; }
    public string ItemSetName { get; set; }
    public virtual ICollection<BatchSetItemSet> BatchSetItemSets { get; set; }
    [Include]
    [Composition]
    [Association("FK_ItemSet_Custodian", "ItemSetId", "CustodianId")]
    public virtual Custodian Custodian { get; set; }
}

サービスコールは次のとおりです。 this.DbContext.Batches.Include("BatchSetItemSets.ItemSet.Custodian").Where(x => x.BatchId == batchId).SingleOrDefault();

4

1 に答える 1

0

属性に近づいていますが、変更する必要があります。

[HasSelfValidation]
public class Batch
{
    public int BatchId { get; set; }
    public string BatchName { get; set; }

    [Include]
    [Composition]
    [Association("FK_Batch_BathSetItemSet", "BatchId", "BatchId", IsForeignKey = false)]
    public virtual ICollection<BatchSetItemSet> BatchSetItemSets { get; set; }
 }

public class BatchSetItemSet
{
    public int BatchSetIdItemSetId { get; set; }
    public int BatchId { get; set; }
    public Nullable<int> ItemSetId { get; set; }
    public string CreatedBy { get; set; }

    [Include]
    [Association("FK_Batch_BathSetItemSet", "BatchId", "BatchId")]
    public Batch Batch { get; set; }

    [Include]
    [Association("FK_BathSetItemSet_ItemSet", "ItemSetId", "ItemSetId")]
    public ItemSet ItemSet { get; set; }
}

public class ItemSet
{
    public int ItemSetId { get; set; }
    public int CustodianId { get; set; }
    public string ItemSetName { get; set; }

    [Include]
    [Composition]
    [Association("FK_BathSetItemSet_ItemSet", "ItemSetId", "ItemSetId", IsForeignKey = false)]
    public virtual ICollection<BatchSetItemSet> BatchSetItemSets { get; set; }

    [Include]
    [Association("FK_ItemSet_Custodian", "CustodianId", "CustodianId")]
    public virtual Custodian Custodian { get; set; }
}

AssociationAttribute.ctor は次のように定義されます。

AssociationAttribute(string name, string thisKey, string otherKey)

次のように構成する必要があります。

  • name: 関係の両端で共有される一意の名前
  • thisKey: キーまたは外部キーを表す、このオブジェクトのプロパティの名前
  • otherKey: キーまたは外部キーを表す他のオブジェクトのプロパティの名前
  • IsForeignKeyAssociationAttribute:関係のこの端が主キーか外部キーかを示すプロパティ。デフォルトはtrue(このナビゲーション プロパティが外部キーであることを意味します)。に設定することでfalse、このオブジェクトに主キーが含まれていることを WCF RIA に示します。特定の を使用するすべてのAssociationAttribute用途について、 を使用nameできるのは 1 つだけIsForeignKey = falseです。そうしないと、ビルド エラーが発生します。
于 2012-11-27T00:03:25.300 に答える