【问题标题】:Introduce custom property in OData在 OData 中引入自定义属性
【发布时间】:2011-06-28 16:55:09
【问题描述】:

在我的数据库用户表中,我有一个名为 DateDeleted 的 DataTime 字段——当用户存在时它为空,当用户“被删除”时设置为正确的值。

我想知道是否有办法为 User 实体引入 IsDeleted 属性,以便

http://odata/service.svc/Users(1)/IsDeleted

将根据是否设置 DateDeleted 返回 true 或 false

我在 google 的研究没有得到任何结果,我几乎可以肯定不可能通过 odata 来实现。我说的对吗?

【问题讨论】:

标签: odata


【解决方案1】:

使用内置提供程序,这在 WCF DS 方面是不可能的。您可能能够以某种方式在 EF 端执行此操作(将其公开为 EF 实体的属性),但我不确定这是否可能。 在 WCF DS 方面,您必须实现自定义提供程序才能执行此操作。不幸的是,这可能需要做很多工作。如果您有兴趣,请先看看这个:http://blogs.msdn.com/b/alexj/archive/2010/01/07/data-service-providers-getting-started.aspx。 上面Shawn指的是自定义提供者接口上的一个方法。

【讨论】:

  • 您好 Vitek,感谢您调查此问题。我已经有一个自定义数据提供程序。我遇到的问题是,如果我向实体类引入新属性,它会给我错误 3004,需要重新生成 db 以将此属性作为字段添加到表中。我一定错过了基本步骤。如果我有从 edmx 模型生成的实体类 - 如何向其中添加 'IsDeleted' 属性?
  • 另外,顺便提一下,这个属性必须通过 odata 公开。
  • 您确定您有自定义提供程序吗?你真的实现了 IDataServiceMetadataProvider 和 IDataServiceQueryProvider 接口吗?如果你这样做了,那么修改它们以公开额外的计算属性应该相对容易。如果您不这样做并且您只是定义了一个 DataService,其中 T 是一个 ObjectContext,那么您使用的是内置的 EF 提供程序,在这种情况下,这在 WCF DS 方面是不可能的。
【解决方案2】:

你可以通过实现DataServiceQueryProvider.GetPropertyValue方法来指定你想要的值。

请在此处找到参考: http://msdn.microsoft.com/en-us/library/system.data.services.providers.idataservicequeryprovider.getpropertyvalue.aspx

该方法有两个参数,实体对象(用户实例)和资源属性(在本例中为“IsDeleted”)。您可以尝试从实体对象中获取“DataDeleted”的属性值,并根据需要返回“IsDeleted”的值。

【讨论】:

  • 亲爱的肖恩,感谢您回来。我的模型是用 edmx 设计的(不是代码优先) - 有没有办法将这种方法与 edmx 模型一起使用?我只是似乎不知道在哪里以及如何实现上述内容。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
  • 1970-01-01
  • 2022-12-17
相关资源
最近更新 更多