1

マスターで多くの種類のアイテムを表示できるマスター/ディテール シナリオを作成する必要があります。それらはすべて実装されていますIDto

interface IDto
{
  int Id { get; set; }
  string Title { get; set; }
  EntityType { get; set;
}

enum EntityType
{
  Contact,
  Person,
  Company,
  Customer
  Employee,
  Vendor,
  Job  
}

注: Entity Framework EDM (生成ObjectContextおよびEntityObjects) を使用しています。

クラス階層は、はContactのサブクラスでPersonありCompanyPersonは のベースクラスであり、は のベースクラスです。には、または のいずれかのプロパティがあり、 のリストがあります。EmployeeCompanyVendorCustomerContactContactPersonJob

ここに画像の説明を入力

マスター リストで、DTO のコレクションをロードしますDomainService(これは です。コントラクトLinqToEntitiesDomainService<ObjectContext>で指定されたフィールドのみをIDto選択し、選択すると、エンティティ全体とそのすべてのフィールド/関連データをロードします詳細エリアで。

更新:別のアイデアを考えました。
列挙型が int または tinyint として格納される上記のコントラクトの 3 行を返すデータベース ビュー (SQL2008) を作成しIDto(その後、列挙型をバイトに変更します)、edm で階層ごとのテーブルを作成できます。リストに格納されている各 EntityType に対して、 からそれを返しDomainServiceます。

ところで、すべての列挙値がクエリに使用されます。実際、エンティティはContactそのEntityTypeプロパティに対して返されません。これContactは、抽象的で aPersonまたは a のいずれかである可能性があるためですCompanyが、両方をクエリするオプションが必要です。

更新 2
顧客は、リスト内の項目のそれぞれについて、そのすべての仕事も望んでいます。
上で説明した階層に基づいて、 a Customer- すべてのジョブを選択します。aContactまたは aの場合Person- その を選択します( a の場合)。またはs は、s に登録するためのものではありません。CustomerJobCustomerVendorEmployeeJob

これを行う唯一の方法は、データベースビューを使用することだと思います。
私が間違っている?結果は何ですか?私はRIAでSL5を使用しています。

ビューの方法は良いですか?または、クライアント POCO を使用して、クライアント内のすべてのクエリを処理する必要がありますか? 実際には、この値は連絡先の名前とその仕事を取得するためにのみ使用されるためです。さらなる詳細と操作は、Entityエンティティ自体の他のビューで行われます。

それで、専門家はどう思いますか?

4

1 に答える 1

0

私はこの投稿が非常に有用であると感じました、そしてそれは実際に私を乾燥させました。

  1. データベースビューは必ずしも正しいアプローチではありません
  2. ドメインサービスからPOCODTOを介して部分エンティティを返します。
于 2011-05-16T02:04:15.620 に答える