gpt4 book ai didi

asp.net - OData 和 Entity Framework 不同模型映射

转载 作者:行者123 更新时间:2023-12-01 22:27:47 25 4
gpt4 key购买 nike

我有一个 Entity Framework 使用的类,名为 EFApplication

已关注 this link ,我想将 OData 查询选项添加到我的 Web Api Controller 。

但是,我不想使用 EFApplication 类作为查询参数。

我想使用另一个仅用于 OData 查询的类 (ODataApplication)

这可能吗?

我想使用不同类的原因之一是因为 OData 不支持 DateTime 属性,这意味着我需要将其更改为 DateTimeOffset,我无法做到这一点(在不破坏许多其他事情的情况下)

// class mapped to Entity Frameowrk / Database
public class EFApplication
{
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
public virtual DateTime DateCreated { get; set; }
}

// class used for OData querying only
public class ODataApplication
{
public Guid Id { get; set; }
public string Name { get; set; }
}

public class ApplicationsController : ApiController
{
[EnableQuery]
public IQueryable<EFApplication> Get(ODataQueryOptions<ODataApplication> options)
{
// how to apply ODataQueryOptions<ODataApplication> query on top of EFApplication

return result; // IEnumerable<EFApplication>
}
}

最佳答案

您可以使用 Automapper 及其功能 Project().To() 解决此问题

// ViewModel class mapped to Entity Framework Model class
public sealed class EFApplicationViewModel
{
public Guid Id { get; set; }
public string Name { get; set; }
public DateTimeOffset DateCreated { get; set; }
}

在您的 Controller 中作为示例:

[EnableQuery]
public IQueryable<EFApplication> Get(ODataQueryOptions<ODataApplication> options)
{
IQueryable<EFApplication> queryable = EFApplicationRepository.All();
IQueryable<EFApplicationViewModel> projected = queryable.Project().To<EFApplicationViewModel>();

return projected;
}

除了 Automapper 之外,您还应该为 DatetimeOffset 设置一点“修复”(再次叹息......)

Mapper.CreateMap<EFApplication, EFApplicationViewModel>();
Mapper.CreateMap<DateTime, DateTimeOffset>().ProjectUsing(src => src);
Mapper.CreateMap<DateTime, DateTimeOffset>().ConvertUsing(src => DateTime.SpecifyKind(src, DateTimeKind.Utc));

关于asp.net - OData 和 Entity Framework 不同模型映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28296835/

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