我正在尝试将V3转换为V4。但是,转换显示删除了对http://aspnetwebstack.codeplex.com/workitem/1753中的System.DateTime的支持。我无法更改模型以使用偏移量。还有其他问题,但没有提供解决方法。
我决定做这样的事情:
var builder = new ODataConventionModelBuilder();
var config = builder.EntitySet<DepartmentListItem>("DepartmentList");
config.EntityType.Ignore(x => x.StartDate);
var ops = new ODataQueryOptions<DepartmentListItem>(new ODataQueryContext(builder.GetEdmModel(), typeof(DepartmentListItem), null), queryOptions.Request);
var query = ops.ApplyTo(_uow.Set<DepartmentListItem>()).Cast<DepartmentListItem>();
只是让它工作,但无济于事。无论如何都要手动处理这种转换。
感谢。
答案 0 :(得分:6)
(SO告诉我,我发布评论太绿了,所以发帖回复)
我强烈赞同Gareth。我们有一个非常完善的基于EDMX的EF环境,被许多应用程序(WPF,MVC)使用。考虑到修改这样的公正,以便绕过V4团队并不了解EF存在以支持数据库而不是无存储库的概念数据模型,这是不可能的。回到V3直到现实检查将其排除(可能是V4.1?)。
答案 1 :(得分:0)
我不确定你有什么样的问题。我的项目正在使用EntityFrameworkModel和webAPI。当我试图从V3迁移到V4时。我遇到了同样的问题。我的解决方案如下:
1.更改模型中的CLRObject
//Represent the data in DB
private Nullable<DateTime> OrderDateOnInternal { get; set; }
//Data exposed by Service
public Nullable<DateTimeOffset> OrderDate
{
get { return new DateTimeOffset(OrderDateOnInternal.Value);}
set { OrderDateOnInternal = value.Value.DateTime; }
}
2。在我从DataBase生成的*** Model.edmx中的conceptsModels中更改模型定义。
原始生成的OrderDate CSDL内容类似于
<Property Name="OrderDate" Type="DateTime" Precision="3" />
然后我把它改成了
<Property Name="OrderDateOnInternal" Type="DateTime" Precision="3" />
3。更改c-s映射内容中的映射
原始生成的映射内容类似于
<ScalarProperty Name="OrderDate" ColumnName="OrderDate" />
然后我把它改成了
<ScalarProperty Name="OrderDateOnInternal" ColumnName="OrderDate" />
这适合我。
答案 2 :(得分:0)
如果你掌控了客户端,我最近发现你可以通过强制转换为Edm.DateTimeOffset来解决问题。以下是帮助我克服这一障碍的一个例子:
OData v4之前的请求:/odata/item?$filter=someDate+gt+datetime'2016-06-16'
OData v4请求:/odata/item?$filter=someDate+gt+cast(2016-06-16, Edm.DateTimeOffset)
希望有所帮助。