0

我有一个数据库,我想从中创建一个实体,然后生成RESTful输出。在实体框架中创建一个自定义属性

我的目标是一旦它变成一个实体,就将一个属性添加到其中一个表中。该属性的数据将是我通过在表中的几个不同字段上进行计算而得出的数据。从那里,代码生成器会像通常那样创建RESTful输出。

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

我修改了部分类并添加到它,但问题是我需要在类的创建时间上填充方法,但我还没有做到这一点。

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

回答

2

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

我还想做的是创建一个属性c,它不作为数据库中的列存在(因此不存在于我的实体中),从数据库中的几个不同属性计算得出说a和b),然后将属性c添加到实体框架类。在这样做的时候,我想它会被生成到RESTful web服务输出中。

发生的问题来自于需要该类来更新所做的任何更改,并将其传播回数据源。我并不关心这一点,因为我希望我的财产是只读的。从我收集到的这是不可能的。

供参考,这两个职位真的帮了: Adding custom property to Entity Framework class (我只能发布一个URL目前,所以这里是地址其他文章)

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

如果由于某种原因,太慢了,我想我可以只让另一台在我数据库有一个数据修改,并计算输出的格式,我正在寻找。我想避免的是让我的客户端不得不执行任何数据操作,因为它将在一些微型设备上,如手掌,手机和黑莓。

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

+0

我结束了使用LINQ to SQL解决方案来获取我的数据,然后把数据,操纵它到我想要的,然后把它放到我自己的类组成的List对象。该列表是iQueryable,我用它作为我的RESTful输出的数据源。 它就像一个魅力。 – georryan 2009-09-28 17:33:33

3

我想你走弯路去找你想要的地方。我没有用过这两种方法(最近)的,所以他们可能不会做正是你以后,但你可以尝试这样的:旁边的.edmx

  1. 创建一个局部类文件模型,它与您的实体具有相同的名称。
  2. 在其中,指定您想要的属性作为只读属性,它在每个get上进行计算。
+0

是的,部分类是要走的路......如果该属性不会存储在数据库中,则该属性与EDMX模型无关。 – 2009-09-25 00:08:51

+0

如果SVC输出基于实体EDMX模型,该如何获取SVC输出中显示的属性? – georryan 2009-09-25 00:13:02

+0

更具体地说,如果SVC基于EDMX模型,那么如何获得只读属性以显示在SVC输出中(这不会影响数据库)。这个程序不会保存回数据库,所以我只想读取数据。我想要在输出中显示数据库中不存在的其他属性。我想我可以让部分课程给我需要的数据。我如何获得SVC? – georryan 2009-09-25 00:24:37