不同的EF属性数据类型可能比存储层?

时间:2010-03-27 20:52:29

标签: sql-server entity-framework types poco self-tracking-entities

我正在使用Entity Framework为PatientEntities组建一个WCF数据服务。

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

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

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

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

我还想为我的Entity getter方法添加自定义,以便类型为“string”的属性“MRN”在返回之前需要执行.Replace(“MR~”,string.Empty)。我可以将此添加到getter方法,但问题是Entity Framework将在下次刷新实体类时覆盖它。我可以把它们放在一个永久的地方吗?

我应该使用POCO吗?如何使用WCF数据服务?服务在哪里抓取元数据?

1 个答案:

答案 0 :(得分: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。将实体映射到一个或多个表的自定义部分