我必须做出一个主详细情形,即主我可以显示多种类型的项目,他们都实现IDto
:的DTO在WCF RIA服务的主从
interface IDto
{
int Id { get; set; }
string Title { get; set; }
EntityType { get; set;
}
enum EntityType
{
Contact,
Person,
Company,
Customer
Employee,
Vendor,
Job
}
注:我使用实体框架EDM(生成ObjectContext
和EntityObject
s)。
的类层次结构是Contact
是Person
和Company
子类,Person
是Employee
的基类,Company
是Vendor
的基类。 Customer
有一个属性Contact
可以是Contact
或Person
,并有一个列表Job
。
现在在主列表,我想从DomainService
(这是一个LinqToEntitiesDomainService<ObjectContext>
,我想只有在IDto
合同指定的字段被选中,然后选择时加载的DTO的集合,加载整个实体所有的字段/相关数据等在细节方面
更新:我想到了另一个想法
创建数据库视图(SQL2008),返回3行。以上IDto
合同所在地枚举将被存储为int或tinyint(然后将枚举更改为字节),然后在edm中,我可以为存储在列表中的每个EntityType创建一个每个层次的表,并从DomainService
中返回它。
顺便说一句,所有的枚举值将用于查询,事实上,任何单位将返回Contact
其EntityType
属性,因为Contact
是抽象的,可以是Person
或Company
,但我还是希望有一个选项来查询他们两个。
更新2
客户还希望,在列表中的项目中的每一个,也是其所有作业。
根据上述层次结构,对于Customer
- 选择所有作业;对于Contact
或Person
- 选择其Customer
的Job
s(如果它的一个Customer
)。 Vendor
或Employee
s不打算注册Job
s。
我认为我能做到这一点的唯一方法是使用数据库视图。
我错了吗?后果是什么?我在RIA中使用SL5。
视图的方式很好吗?或者我应该使用客户端POCO处理客户端中的所有查询?因为这个值实际上只用于检索联系人名称及其作业。进一步的细节和操作将在他们自己的Entity
实体的其他视图中完成。
那么你们专家怎么看?