WCF RIA服务主要细节中的DTO

时间:2011-05-12 22:42:43

标签: silverlight entity-framework wcf-ria-services dto data-transfer-objects

我必须制作一个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(生成ObjectContextEntityObject)。

类层次结构是ContactPersonCompany的子类,PersonEmployee的基类,CompanyVendor的基类。 Customer有一个属性Contact,可以是ContactPerson,并且列表为Job

enter image description here

现在在主列表中,我想从DomainService加载一组DTO(它是LinqToEntitiesDomainService<ObjectContext>,我只希望IDto合同中的指定字段为然后,选中后,在详细信息区域中加载整个实体及其所有字段/相关数据等。

更新:我想到了另一个想法 创建一个数据库视图(SQL2008),返回上面IDto合约的3行,其中枚举将存储为int或tinyint(然后将枚举更改为字节),然后在edm中我可以创建一个存储在列表中的每个EntityType的每个层次表,并从DomainService返回。

BTW,所有枚举值都将用于查询,实际上,没有实体会为其Contact属性返回EntityType,因为Contact是抽象的,可以是PersonCompany,但我仍然想要查询它们。

更新2
对于列表中的每个项目,客户还希望其所有工作也是如此 基于我上面描述的层次结构,对于Customer - 选择其所有作业;对于ContactPerson - 选择其Customer的{​​{1}} s(如果其为Job)。 CustomerVendor并不打算在Employee注册。

我认为我能做到这一点的唯一方法就是使用数据库视图 我错了吗?有什么后果?我正在使用SL5和RIA。

观点方式好吗?或者我应该使用客户端POCO处理客户端中的所有查询?因为这个值实际上只用于检索联系人姓名及其工作。进一步的细节和操作将在他们自己的Job实体的其他视图中完成。

那么你的专家怎么想?

1 个答案:

答案 0 :(得分:0)

我发现this帖子非常有用,它实际上让我有了一个决定。

  1. 数据库视图不一定是正确的方法
  2. 将通过域服务从POCO DTO返回部分实体。