在ODataConventionModelBuilder中设置数据类型

时间:2014-06-11 08:19:55

标签: asp.net-web-api odata

我在OData文档中看到有Edm种类型DateTime。目前在我的数据库中有许多DATE字段在EF中表示为DateTimes,因此ODataConventionModelBuilder将它们声明为Edm.DateTime。如何将其更改为Edm.Date

希望我能做到这一点:

entityType.Property(p => p.AgreementDate).EdmType = EdmType.Date;

2 个答案:

答案 0 :(得分:2)

某些属性的相应Edm类型是从CLR类型映射的,不能被ODataConventionModelBuilder覆盖。

如果您想更改Edm类型,可以在ODataConventionModelBuilder中忽略这些属性。

通过在ODataConventionModelBuilder上调用GetEdmModel获取Edm模型后,可以通过调用OData API将这些属性与Edm.Date一起添加到Edm模型中。

答案 1 :(得分:1)

以下是我的答案,以防有人对如何实施冯昭的建议感兴趣。我没有发现API太可发现,所以我想分享。

首先,像往常一样使用ODataConventionModelBuilder构建您的EDM模型,但忽略日期属性:

...
entitType.Ignore(p => p.AgreementDate);
...
IEdmModel model = builder.GetEdmModel();

然后手动添加日期属性"

 var myType = (EdmStructuredType)model.FindDeclaredType(typeof(MyType).FullName);
 var dateType = (IEdmPrimitiveType)model.FindType("Edm.Date");
 myType.AddProperty(new EdmStructuralProperty(myType, "AgreementDate", new EdmPrimitiveTypeReference(dateType, false)));

那就是它。