我在OData
文档中看到有Edm
种类型Date
和Time
。目前在我的数据库中有许多DATE
字段在EF中表示为DateTimes,因此ODataConventionModelBuilder
将它们声明为Edm.DateTime
。如何将其更改为Edm.Date
?
希望我能做到这一点:
entityType.Property(p => p.AgreementDate).EdmType = EdmType.Date;
答案 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)));
那就是它。