マスターで多くの種類のアイテムを表示できるマスター/ディテール シナリオを作成する必要があります。それらはすべて実装されています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
およびEntityObject
s) を使用しています。
クラス階層は、はContact
のサブクラスでPerson
ありCompany
、Person
は のベースクラスであり、は のベースクラスです。には、または のいずれかのプロパティがあり、 のリストがあります。Employee
Company
Vendor
Customer
Contact
Contact
Person
Job
マスター リストで、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 に登録するためのものではありません。Customer
Job
Customer
Vendor
Employee
Job
これを行う唯一の方法は、データベースビューを使用することだと思います。
私が間違っている?結果は何ですか?私はRIAでSL5を使用しています。
ビューの方法は良いですか?または、クライアント POCO を使用して、クライアント内のすべてのクエリを処理する必要がありますか? 実際には、この値は連絡先の名前とその仕事を取得するためにのみ使用されるためです。さらなる詳細と操作は、Entity
エンティティ自体の他のビューで行われます。
それで、専門家はどう思いますか?