1

我必须制作一个 Master-Detail 场景,在该场景中,我可以显示许多类型的项目,它们都实现了IDto

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

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

注意:我正在使用实体框架 EDM(生成ObjectContextEntityObjects)。

类层次结构是和Contact的子类,是 的基类,是 的基类。有一个可以是 a或 a的属性,并且有一个.PersonCompanyPersonEmployeeCompanyVendorCustomerContactContactPersonJob

在此处输入图像描述

现在在主列表中,我想从DomainService(它是 a加载 DTO 集合LinqToEntitiesDomainService<ObjectContext>,并且我只想IDto选择合同中的指定字段,然后在选择时加载整个实体及其所有字段/相关数据等细节区域。

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

顺便说一句,所有枚举值都将用于查询,实际上,没有实体将返回ContactEntityType属性,因为Contact它是抽象的,可以是 aPerson或 a Company,但我仍然希望有一个查询它们的选项。

更新 2
对于列表中的每一项,客户还想要其所有工作。
基于我上面描述的层次结构,对于Customer- 选择它的所有工作;对于 aContact或 a Person- 选择它CustomerJobs(如果它是 a Customer)。Vendoror Employees 并不意味着要在Jobs 中注册。

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

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

那么各位专家怎么看?

4

1 回答 1

0

我发现这篇文章非常有用,它实际上让我有了一个决定。

  1. 数据库视图不一定是正确的方法
  2. 将通过 POCO DTO 从域服务返回部分实体。
于 2011-05-16T02:04:15.620 回答