我必须制作一个Master-Detail场景,在master中我可以显示许多类型的项目,它们都实现了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
)。
类层次结构是Contact
是Person
和Company
的子类,Person
是Employee
的基类,Company
是Vendor
的基类。 Customer
有一个属性Contact
,可以是Contact
或Person
,并且列表为Job
。
现在在主列表中,我想从DomainService
加载一组DTO(它是LinqToEntitiesDomainService<ObjectContext>
,我只希望IDto
合同中的指定字段为然后,选中后,在详细信息区域中加载整个实体及其所有字段/相关数据等。
更新:我想到了另一个想法
创建一个数据库视图(SQL2008),返回上面IDto
合约的3行,其中枚举将存储为int或tinyint(然后将枚举更改为字节),然后在edm中我可以创建一个存储在列表中的每个EntityType的每个层次表,并从DomainService
返回。
BTW,所有枚举值都将用于查询,实际上,没有实体会为其Contact
属性返回EntityType
,因为Contact
是抽象的,可以是Person
或Company
,但我仍然想要查询它们。
更新2
对于列表中的每个项目,客户还希望其所有工作也是如此
基于我上面描述的层次结构,对于Customer
- 选择其所有作业;对于Contact
或Person
- 选择其Customer
的{{1}} s(如果其为Job
)。 Customer
或Vendor
并不打算在Employee
注册。
我认为我能做到这一点的唯一方法就是使用数据库视图 我错了吗?有什么后果?我正在使用SL5和RIA。
观点方式好吗?或者我应该使用客户端POCO处理客户端中的所有查询?因为这个值实际上只用于检索联系人姓名及其工作。进一步的细节和操作将在他们自己的Job
实体的其他视图中完成。
那么你的专家怎么想?