我正在使用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