gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:29:40 26 4
gpt4 key购买 nike

我正在从 v1-3 升级到 v4,但遇到了一些问题。

我的理解是 DateTime 不受支持,我必须始终使用 DateTimeOffset。美好的。

但在我存储 Sql date 之前DateTime 中的数据类型,现在看来我收到此错误:

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,DefaultValue=,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, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

[Required, MaxLength(50)]
public string Reference { get; set; }

[Column(TypeName = "date")]
public DateTimeOffset LoggedDate { get; set; }
}

这在 EF 中无效。

最佳答案

一种选择是在实体中定义新属性。说 Title 映射到 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();
}
}

Controller 看起来像:
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 处理日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24829422/

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