我正在使用Microsoft的Entity Framework 6.1.3。数据库优先(来自Azure SQL Server实例)。自动生成的实体是这样的 - 数据库列是DATETIME2(0),但我真的只是想坚持的日期但这是另一个讨论:ModelState.IsValid在EF数据库优先发布日期时间为false
public partial class Liquidated
{
public long ID { get; set; }
public System.DateTime LiquidationDate { get; set; }
public string Comment { get; set; }
}
自动生成的控制器:
// POST: api/Liquidations
[ResponseType(typeof(Liquidated))]
public IHttpActionResult PostLiquidated(Liquidated liquidated)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
单元测试使用RestSharp:
var client = new RestClient("http://localhost:64185/api/Liquidations");
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("authorization", "bearer " + token.access_token);
request.AddHeader("content-type", "application/x-www-form-urlencoded");
request.AddHeader("audience", "Any");
request.AddHeader("accept-language", "en-gb");
request.AddHeader("accept", "application/json");
var liquidation = new Liquidated();
liquidation.LiquidationDate = DateTime.Now;
liquidation.Comments = "Updated group name 1";
request.AddObject(liquidation);
IRestResponse<Liquidated> response = client.Execute<Liquidated>(request);
但是,当我在控制器检查的ModelState是无效的并给出了LiquidationDate以下格式错误:
"The value '18/04/2017 14:26:12' is not valid for LiquidationDate."
我搜索很多帖子,试图强行格式化(是C#实体和SQL Server之间的日期格式的问题?),但我看不到我做错了什么。任何帮助深表感谢!
模型状态错误是因为您将错误的数据发布到API,它与实体框架无关。我猜想这很可能与日期格式有关(例如'dd/mm/yyy' vs'mm/dd/yyyy') – DavidG
建议在EF中使用DateTimeOffset。 http://stackoverflow.com/questions/9389954/entity-framework-mapping-datetimeoffset-to-sql-server-datetime –
@DavidG - 感谢您的评论。我从单元测试文件中删除了任何日期数据并且工作。然后,我在客户端类中替换了日期时间,并将其更改为字符串,其中我有完整的格式控制,即yyyy-MM-dd。我认为我对于RestSharp格式化的能力过分信任 - 不确定它甚至可能,但会发现。 – Bexbissell