0

我正在使用实体框架为 PatientEntities 组合一个 WCF 数据服务。

我的解决方案需要满足这些要求:

  • 实体 Patient 的属性 DateOfBirth 作为字符串存储在 SQL Server 中。如果实体类不使用“字符串”类型而是使用 DateTime 类型,那将是理想的。(我希望这是可能的,因为我们正在从存储层中抽象出来)。哪里可以设置转换机制来转换日期时间/字符串,以便实体和 SQL Server 同步?我无法更改存储层的结构,所以我必须解决它。
  • 需要使用 WCF 数据服务(只读,因此无需保存更改),因为客户端将能够使用 LINQ 表达式来使用该服务。他们可以根据所需的任何给定查询场景生成结果,而不受 GetPatient(int ID) 等单一方法的限制。

我曾尝试使用 DTO,但遇到了将 ObjectContext 映射到 DTO 的问题,我认为这在理论上是不可能的……或者如果是的话,太复杂了。

我尝试使用自我跟踪实体,但如果我是正确的,它们需要来自 .edmx 文件的元数据,并且这不允许使用不同的属性数据类型。

我还想为我的 Entity getter 方法添加自定义,以便在返回之前执行类型为“string”的属性“MRN”。Replace("MR~", string.Empty)。我可以将它添加到 getter 方法,但问题是实体框架将在下次刷新实体类时覆盖它。有没有固定的地方可以放这些?

我应该改用 POCO 吗?这将如何与 WCF 数据服务一起使用?服务将在哪里获取元数据?

4

1 回答 1

0

这绝对是可能的。您需要使用的是 QueryView,它允许您控制给定列如何映射到实体上的属性。例如,这是您可以对患者实体执行的操作。

<EntitySetMapping Name="Patients">
<QueryView>
select value conceptualnamespace.Patient(p.PatientId,
cast(p.DateOfBirth as Edm.DateTime), 
replace(p.Name,'MR~','')
from entitycontainer.Patients as p
</QueryView>
</EntitySetMapping>

我在我的书中更多地介绍了这个概念。配方被调用。15-2。将实体映射到一个或多个表的自定义部分

于 2010-07-10T18:37:29.193 回答