在Entity Framework中创建自定义属性

时间:2009-09-24 23:45:00

标签: asp.net visual-studio-2008 entity-framework wcf-data-services

我有一个数据库,我想从中创建一个实体,然后生成RESTful输出。

我的目标是在其成为实体后向其中一个表添加属性。该属性的数据将是我通过在表格中的几个不同字段上进行的计算得出的数据。从那里开始,代码生成器将像往常一样创建RESTful输出。

我已经设法能够更新edmx文件的SSDL,CSDL和映射部分,并使用SampleEdmxCodeGenerator作为自定义工具。当我使用我的自定义属性填充edmx文件中的所有部分时,svc失败,因为(我假设)该属性在数据库中不存在。如果我将该属性从SSDL中删除,但将其放在客户端模式(CSDL)和映射部分中,则无法构建我的项目。

我已修改了部分类并添加了它,但问题是我需要在类的创建时填充方法,而我还没有能够这样做。

我是朝着正确的方向前进,还是这不可能?看起来我应该能够以最小的努力做到这一点,但我一直在打墙。

2 个答案:

答案 0 :(得分:3)

我认为你正在走弯路到达你想要的地方。我没有使用过这两种方法(最近),所以他们可能不会完全你所追求的,但你可以试试这个:

  1. 在.edmx模型旁边创建一个部分类文件,该文件与您的实体同名。
  2. 在其中,将您想要的属性指定为只读属性,对每个get进行计算。

答案 1 :(得分:2)

部分类和部分方法是我答案的第一部分。我本来想做的事情是做不到的。我可以操作使用部分方法和部分类返回的数据。我可以插入On methodname Changed()方法来格式化我希望如何显示数据的数据,但这只能让我对我想要的结果有所帮助。

我还想做的是创建一个属性c,它不作为数据库中的列存在(因此在我的实体中不存在),从数据库中的几个不同属性计算出来(比如说a和b),然后将属性c添加到实体框架类。在执行此操作时,我认为它将生成到RESTful Web服务输出中。

发生的问题来自于需要类更新您所做的任何更改,并让它传播回数据源。我不在乎,因为我希望我的财产只读。从我收集的内容来看,这是不可能的。

作为参考,这两个帖子确实有帮助: Adding custom property to Entity Framework class (我现在只能发布一个网址,所以这里是另一篇文章的地址)

social.msdn.microsoft.com/Forums/en-US/adodotnetdataservices/thread/b7a9e01d-c5c2-4478-8f01-00f7f6e0f75f

我决定这样做,就是像我到目前为止公开我的实体,然后使用操作数据并重新格式化的RESTful服务,并引入所需的属性。我将结果转换为我自己的数据对象,并将其用作另一个RESTful Web服务公开的数据源。我认为这个网站提供了一个如何公开自定义数据源的好例子。

mstecharchitect.blogspot.com/2008/12/surfacing-custom-data-source-in-adonet.html

如果由于某种原因太慢,我想我可以在我的数据库中创建另一个表,该表具有数据的重新处理,以及我正在寻找的格式的计算输出。我想要避免的是让我的客户端不得不进行任何数据操作,因为它会出现在手掌,iphone和黑莓等微型设备上。

希望能帮助其他人解决同样的问题。这似乎是当前版本的数据服务的一个缺陷,但在某种程度上,我确信他们将在以后的版本中解决它。也许T4和.net 4.0将会解决它。我不确定。