我真的希望能够在我的Entity Framework Code First数据库项目中使用NodaTime,但还没有找到一种"干净"的方法来实现它.我真正想做的是:
public class Photoshoot
{
public Guid PhotoshootId{get; set;}
public LocalDate ShootDate{get; set;} //ef ignores this property
}
Run Code Online (Sandbox Code Playgroud)
是否有任何支持或推荐的方法将NodaTime与EF Code First一起使用?
我正在研究使用NodaTime LocalDate来替换我们现有的BCL DateTime/DateTimeOffset类.由于我们对DateTime可论证的模糊行为的误解,我们在代码中遇到了许多与时区相关的问题.
为了充分利用NodaTime,我希望能够从YYYY-MM-DD形式的ASP.NET Web API 2 Web服务发送和接收日期.我已成功将LocalDate正确序列化为YYYY-MM-DD.但是,我无法将日期查询参数反序列化为LocalDate.LocateDate始终是1970-01-01.
这是我当前的原型代码(为清楚起见,删除了一些代码):
PeopleController.cs
[RoutePrefix("api")]
public class PeopleController : ApiController
{
[Route("people")]
public LocalDate GetPeopleByBirthday([FromUri]LocalDate birthday)
{
return birthday;
}
}
Run Code Online (Sandbox Code Playgroud)
的Global.asax.cs
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
// Web API configuration and services
var formatters = GlobalConfiguration.Configuration.Formatters;
var jsonFormatter = formatters.JsonFormatter;
var settings = jsonFormatter.SerializerSettings;
settings.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);
settings.Formatting = Formatting.Indented;
settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
GlobalConfiguration.Configure(WebApiConfig.Register);
}
}
Run Code Online (Sandbox Code Playgroud)
我通过执行Web服务
http://localhost/api/people?birthday=1980-11-20
Run Code Online (Sandbox Code Playgroud)
但是,返回的是1970年1月1日.进入代码我确认birthday设置为1970-01-01.
如何配置序列化,以便将URL中指定的日期作为查询参数(或路径元素)正确地序列化为NodaTime LocalDate?