gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:27:59 26 4
gpt4 key购买 nike

我制作了一个部分类文件来向我的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com