J'utilise d'abord EF 4.1 avec base de données.Pourquoi le framework d'entité n'annote-t-il pas certaines colonnes non nullables comme requis?
table Exemple:
CREATE TABLE dbo.Foo(
[ID] [int] IDENTITY(1,1) NOT NULL,
Created datetime not null default(getdate()),
Title varchar(80) not null
PRIMARY KEY CLUSTERED ([ID] ASC)
)
EF charge correctement le modèle avec les 3 colonnes comme annulable = false.
sortie du poste de génération de code "ADO.NET DbContext générateur":
public partial class Foo
{
public int ID { get; set; }
public System.DateTime Created { get; set; }
public string Title { get; set; }
}
Dans MVC3 je générer le FooController
via le contexte db et le modèle foo. Quand j'appelle/Foo/Create et que je clique sur "Créer" sur le formulaire vierge, une erreur de validation apparaît dans le champ "Créé" mais pas dans "Titre".
Si j'entre seulement « créé » ce jour, je reçois une exception:
validation a échoué pour une ou plusieurs entités. Pour plus de détails, voir la propriété 'EntityValidationErrors'
L'exception est "Le champ Titre est obligatoire".
Je ne sais pas pourquoi cela fonctionne bien pour une colonne mais pas pour l'autre. Mon premier correctif consistait simplement à ajouter l'annotation, mais le code de la classe est généré automatiquement par EF.
La seule solution qui semble fonctionner est d'utiliser une classe de métadonnées partielle: ASP.NET MVC3 - Data Annotations with EF Database First (ObjectConext, DbContext)
Je peux ajouter la balise [Obligatoire] comme vous le souhaitez mais cela ne devrait pas être nécessaire. Est-ce un bug dans EF ou est-ce que je manque quelque chose?
L'approche des métadonnées semble être un travail supplémentaire, mais elle résout le problème. J'ai considéré le code d'abord, mais je pense que les révisions seraient difficiles sans un produit comme SQL Compare + sauvegarde de schéma préalable. – wtjones