我必须制作一个主细节场景,在主场景中我可以显示多种类型的项目,它们都实现了 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 是子类 PersonCompany, Person 是的基类 Employee, Company 是的基类 Vendor. Customer 有财产 Contact 这可以是 Contact 或一个 Person, ,并有一个列表 Job.

enter image description here

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

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

顺便说一句,所有枚举值都将用于查询,实际上,没有实体会返回 Contact 为其 EntityType 财产,因为 Contact 是抽象的,可以是 Person 或一个 Company, ,但我仍然希望有一个选项来查询它们两个。

更新2
对于列表中的每一项,客户还希望获得其所有作业。
基于我上面描述的层次结构,对于 Customer - 选择其所有作业;为一个 Contact 或一个 Person - 选择它的 CustomerJobs(如果它是 Customer). Vendor 或者 Employees 并不意味着要注册 Jobs。

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

景色好吗?或者我应该使用客户端 POCO 处理客户端中的所有查询?因为实际上这个值仅用于检索联系人姓名及其职位。进一步的细节和操作将在其他视图中完成 Entity 实体本身。

那么各位专家怎么看呢?

有帮助吗?

解决方案

我发现了 帖子非常有用,它实际上让我做出了决定。

  1. 数据库视图不一定是正确的方法
  2. 将通过 POCO DTO 从域服务返回部分实体。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top