我制作了一个部分类文件来向我的 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 answer至 OData read-only property .但注释只是建议性的;它不会阻止客户端尝试设置计算属性(例如,在 POST
请求中)。
关于entity-framework - OData 包括通过部分类添加到 Entity Framework 模型的 "Custom Properties",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36344979/