2

Actors、Films、Actors_Films の 3 つのテーブルを含む DB があります。2 つのテーブルには多対多の関係 (Actors と Films) があり、これはジャンクション テーブル (Actors_Films) を使用してモデル化されています。

Silverlight アプリで EF4 を使用しています。EF モデルを作成しましたが、edmx デザイナーには Actors エンティティと Films エンティティだけが表示されますが、それぞれに他のエンティティへのナビゲーション プロパティがあります (Actors には Films のナビゲーション プロパティがあり、Films には Actors のナビゲーション プロパティがあります)。 .

ドメイン サービスを追加し、プロジェクトをビルドしました。例として俳優を使用して、俳優を循環させるデータフォームと、現在選択されている俳優が出演した映画を表示するデータグリッドを含むビューを追加したいと考えています。ただし、[データ ソース] タブでは、 Actors と Films の 2 つのエンティティを含むドメイン コンテキスト。これらの 2 つのエンティティは実際の列のみを表示しており、ナビゲーション プロパティは表示されていません。

アクター ---ActorID ---ActorName

映画 ---FilmID ---FilmTitle

これは正しいです?ナビゲーション プロパティが表示されるはずだと思いました。

私の実際のアプリケーションはこれよりも複雑ですが、これは実際の問題に焦点を当てるための単純化された例です。

ありがとう

ミック

4

1 に答える 1

1

WCF Riaサービスは、多対多の関係をサポートしていません。edmxに関連付けテーブルが必要です。ナビゲートプロパティをクライアントに表示するには、[含める]属性を追加して、エンティティの適切なメタデータのプロパティをナビゲートする必要があります。DomainServiceを作成するときに通常生成されるメタデータ。たとえば、多対多のContractPositionおよびOrde​​rPositionには次のような関係があります。

//ContractPositionsService.metadata.cs
[MetadataTypeAttribute(typeof(ContractPosition.ContractPositionMetadata))]
public partial class ContractPosition
{
    internal sealed class ContractPositionMetadata
    {
        public int ContractPositionId { get; set; }
        [Include]
        public EntityCollection<ContractToOrderLink> ContractToOrderLinks { get; set; }

        ...
    }
//ContractToOrdersLinksService.metadata.cs
[MetadataTypeAttribute(typeof(ContractToOrderLink.ContractToOrderLinkMetadata))]
public partial class ContractToOrderLink
{

    internal sealed class ContractToOrderLinkMetadata
    {
        [Include]
        public ContractPosition ContractPosition { get; set; }

        public int ContractPositionId { get; set; }

        [Include]
        public OrderPosition OrderPosition { get; set; }

        public int OrderPositionId { get; set; }            
    }
}


//OrderPositionsService.metadata.cs
[MetadataTypeAttribute(typeof(OrderPosition.OrderPositionMetadata))]
public partial class OrderPosition
{               
    internal sealed class OrderPositionMetadata
    {
        public int OrderPositionId { get; set; }        

        [Include]
        public EntityCollection<ContractToOrderLink> ContractToOrderLinks { get; set; }

        ...
    }
}
于 2011-06-09T09:07:58.007 に答える