entity-framework - OData 包括通过部分类添加到 Entity Framework 模型的 "Custom Properties"

标签 entity-framework odata

我制作了一个部分类文件来向我的 Entity Framework 生成的模型添加新属性。

我正在使用 WebAPI + OData,以及 $metadata 没有列出我的新/自定义属性 ,因此它返回的 JSON 不包括我的新/自定义属性。

例如,假设我的实体是“人”

“人”有一个数据库属性;配偶数;在 $metadata 中返回的 int 如下所示:<Property Name="NumSpouses" Type="Edm.Int32"/>
太好了,但我将这样的属性添加到了单独的文件中,with a partial class:

public partial class Person {
  ...
  public string MarriedStatus { 
     get { return this.NumSpouses==0 ? "Single" : "Married"; }
  }
  ... 
}

如何在我的 OData 响应中获得此属性?
<Property Name="MarriedStatus" Type="Edm.String"/>
目前,如果我要求 MarriedStatus$expand (好像它是一个 NavigationProperty ......它不是[我想我无论如何都会尝试 $expand 就好像它神奇地提供了自定义属性]),我会收到这样的消息:
{
  "odata.error":{
    "code":"","message":{
      "lang":"en-US","value":"The query specified in the URI is not valid. Could not find a property named 'MarriedStatus' on type 'fakeDataModels.Person'."
},"innererror":{
  "message":"Could not find a property named 'MarriedStatus' on type 'fakeDataModels.Person'.","type":"Microsoft.Data.OData.ODataException","stacktrace":"   at ..."
    }
  }
}

最佳答案

MarriedStatus是一个计算/只读属性。 OData 的 ASP.NET 实现当前不支持此类属性。作为解决方法,添加一个抛出 NotImplementedException 的 setter .

    public string MarriedStatus {
        get { return this.NumSpouses > 0 ? "Married" : "Single"; }
        set { throw new NotImplementedException(); }
    }

或者,如果您使用的是 OData V4,您可以注释 MarriedStatus指定它是计算的。见 Yi Ding's answerOData read-only property .但注释只是建议性的;它不会阻止客户端尝试设置计算属性(例如,在 POST 请求中)。

关于entity-framework - OData 包括通过部分类添加到 Entity Framework 模型的 "Custom Properties",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36344979/

相关文章:

c# - 如何定义 EF code-first tri-way FK 关系? ( parent 有两个相关的 child )

java - 使用 Olingo v2 Java 作为 PATCH to OData v2 服务的客户端

linq - 是否有对 linq where 表达式的 ODATA 查询(ODATA 到 Linq)

c# - 是什么导致 EF 插入比普通 ADO.NET 慢得多?

c# - EF 核心多对多配置不适用于 Fluent API

c# - 使用用户定义的参数调用存储过程

mongodb - OData Jaydata - odata 更新请求返回错误 404(SAPUI5,节点)

c# - 对象不与 child 一起添加 - EF Code First

json - 从冗长的 JSON 升级到 JSON light 会对只查看数据而不查看元数据的人产生怎样的影响?

c# - OData 异常 : A recursive loop of complex types is not allowed