0

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

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

我设法能够更新 SSDL、CSDL 和 edmx 文件的映射部分,同时使用 SampleEdmxCodeGenerator 作为自定义工具。当我用我的自定义属性填写了 edmx 文件中的所有部分时,svc 失败,因为(我假设)该属性在数据库中不存在。如果我将属性保留在 SSDL 之外,但将其放在客户端架构 (CSDL) 和映射部分中,我将无法构建我的项目。

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

我是否朝着正确的方向前进,或者这不可能?似乎我应该能够以最小的努力做到这一点,但我一直在碰壁。

4

2 回答 2

3

我认为您正在绕道而行到达您想要的地方。我没有使用这些方法中的任何一种(最近),所以他们可能不会完全按照你的要求做,但你可以试试这个:

  1. 在 .edmx 模型旁边创建一个部分类文件,该模型与您的实体同名。
  2. 在其中,将您想要的属性指定为只读属性,该属性对每个get.
于 2009-09-25T00:01:19.093 回答
2

部分类和部分方法是我回答的第一部分。我本质上想做的事情我做不到。我可以操作使用部分方法和部分类返回的数据。我可以插入 On methodname Changed() 方法来格式化数据,使其显示为我希望的显示方式,但这只会让我部分达到我想要的结果。

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

发生的问题来自于类需要更新您所做的任何更改,并将其传播回数据源。我不在乎,因为我希望我的属性是只读的。从我收集到的信息来看,这是不可能的。

作为参考,这两个帖子真的很有帮助: 向实体框架类添加自定义属性 (我目前只能发布一个网址,所以这是另一篇文章的地址)

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 会解决这个问题。我不知道。

于 2009-09-26T01:01:20.103 回答