J'utilise Microsoft Entity Framework 6.1.3. avec Database First (à partir d'une instance Azure SQL Server). Le produit automatiquement entité ressemble à ceci - la colonne de base de données est datetime2 (0) mais vraiment je veux juste persister la date, mais c'est une autre discussion:ModelState.IsValid est faux sur un poste datetime avec la base de données EF Premier
public partial class Liquidated
{
public long ID { get; set; }
public System.DateTime LiquidationDate { get; set; }
public string Comment { get; set; }
}
Le contrôleur généré automatiquement:
// POST: api/Liquidations
[ResponseType(typeof(Liquidated))]
public IHttpActionResult PostLiquidated(Liquidated liquidated)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
le test unitaire en utilisant 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);
Mais quand je l'ModelState dans inspecte le contrôleur est pas valide et montre l'erreur de format suivant pour LiquidationDate:
"The value '18/04/2017 14:26:12' is not valid for LiquidationDate."
J'ai cherché de nombreux postes, a essayé de forcer la mise en forme (est-il une question de mise à jour entre les entités C# et SQL Server?) mais je ne vois pas ce que je fais mal. Toute aide est très appréciée!
L'erreur d'état du modèle est due au fait que vous envoyez des données erronées à l'API, cela n'a rien à voir avec Entity Framework. Je suppose que c'est probablement quelque chose à voir avec le format de date ('jj/mm/aaaa' vs' mm/jj/aaaa' par exemple) – DavidG
Il est recommandé d'utiliser DateTimeOffset avec EF. http://stackoverflow.com/questions/9389954/entity-framework-mapping-datetimeoffset-to-sql-server-datetime –
@DavidG - merci pour le commentaire. J'ai retiré toutes les données de date du poste de test unitaire et cela a fonctionné. J'ai ensuite remplacé datetime dans la classe côté client et l'a changé en une chaîne, dont j'ai le contrôle de mise en forme complète, c'est-à-dire aaaa-MM-jj. Je pense que je mettais trop de confiance dans la capacité de RestSharp à mettre en forme de façon appropriée - pas sûr que ce soit même possible, mais je vais le découvrir. – Bexbissell