entity-framework – 使用OData v4,EF6和Web API v2.2处理日期

entity-framework – 使用OData v4,EF6和Web API v2.2处理日期,第1张

概述我正在从v1-3升级到v4,但我遇到了一些问题. 我的理解是DateTime不受支持,我必须始终使用DateTimeOffset.精细. 但在我在DateTime中存储Sql日期数据类型之前,现在看来我得到了这个错误: Member Mapping specified is not valid. The type 'Edm.DateTimeOffset[Nullable=False,Default 我正在从v1-3升级到v4,但我遇到了一些问题.

我的理解是DateTime不受支持,我必须始终使用DateTimeOffset.精细.

但在我在DateTime中存储sql日期数据类型之前,现在看来我得到了这个错误:

Member MapPing specifIEd is not valID. The type 'Edm.DateTimeOffset[Nullable=False,DefaultValue=,Precision=]' of member 'CreatedDate' in type 'MyEntity' is not compatible with 'sqlServer.date[Nullable=False,Precision=0]'

为此做了什么工作?我需要能够专门存储数据库中的日期(时间和地点并不重要).如果我能得到Edm.Date以及返回的数据类型会很棒,但我之前没有.

谢谢.

编辑:示例类

之前:

public class Ticket{    [Key,DatabaseGenerated(DatabaseGeneratedOption.IDentity)]    public int ID { get; set; }    [required,MaxLength(50)]    public string Reference { get; set; }    [Column(Typename = "date")]    public DateTime LoggedDate { get; set; }}

后:

public class Ticket{    [Key,MaxLength(50)]    public string Reference { get; set; }    [Column(Typename = "date")]    public DateTimeOffset LoggedDate { get; set; }}

这在EF中无效.

解决方法 一种选择是在实体中定义新属性.说标题映射到EF:
public partial class Title{    public int ID { get; set; }    public string name { get; set; }    public Nullable<System.DateTime> CreatedOn { get; set; }}

然后添加DateTimeOffset的新属性:

public partial class Title{    [NotMapped]    public DateTimeOffset? EdmCreatedOn    {        // Assume the CreateOn property stores UTC time.        get        {            return CreatedOn.HasValue ? new DateTimeOffset(CreatedOn.Value,TimeSpan.FromHours(0)) : (DateTimeOffset?)null;        }        set        {            CreatedOn = value.HasValue ? value.Value.UtcdateTime : (DateTime?)null;        }    }}

并且生成OData模型的代码如下所示:

public static IEdmModel GetModel()    {        ODataConventionModelBuilder builder = new ODataConventionModelBuilder();        EntityTypeConfiguration<Title> TitleType= builder.EntityType<Title>();        TitleType.Ignore(t => t.CreatedOn);        TitleType.Property(t => t.EdmCreatedOn).name = "CreatedOn";        builder.EntitySet<Title>("Titles");        builder.namespace = typeof(Title).namespace;        return builder.GetEdmModel();    }}

控制器看起来像:

public class TitlesController : ODataController{    CustomerManagementSystemEntitIEs entitIEs = new CustomerManagementSystemEntitIEs();    [Enablequery(PageSize = 10,MaxExpansionDepth = 5)]    public IhttpActionResult Get()    {        Iqueryable<Title> Titles = entitIEs.Titles;        return Ok(Titles);    }    public IhttpActionResult Post(Title Title)    {        entitIEs.Titles.Add(Title);        return Created(Title);    }}
总结

以上是内存溢出为你收集整理的entity-framework – 使用OData v4,EF6和Web API v2.2处理日期全部内容,希望文章能够帮你解决entity-framework – 使用OData v4,EF6和Web API v2.2处理日期所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1137723.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存