EFCode Première Propriété Null problème
- Je utiliser EFCode d'Abord dans asp.net mvc 3 modèle. (Entity Framework 4.0 et EFCode Première 0.8)
Le modèle est défini comme ci-dessous:
public class User
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public int WorkedYears { get; set; }
}
lors de l'utilisation db.Users.Find(1)
, va lancer cette erreur:
Le "WorkedYears' bien sur 'Utilisateur'
n'a pas pu être réglé à une 'null' valeur.
Vous devez définir cette propriété pour un
valeur non nulle de type "Int32'.
Note: l'utilisateur.Id=1 existe dans la base de données, et WorkedYears de l'enregistrement est NULL.
si j'ai mis le WorkedYears = 0 dans la base de données, l'erreur disparaît,
et aussi si je définit la propriété comme:public int? WorkedYears{get; set;}
, l'erreur sera trop beau disparaître.
mais je ne veux pas utiliser int?, et aussi que la colonne de garder la valeur NULL si pas de jeu.
Donc, il y a une autre solution pour résoudre ce problème?
Merci beaucoup.
OriginalL'auteur Alexey | 2011-03-31
Vous devez vous connecter pour publier un commentaire.
Votre modèle ne reflète pas votre base de données et de ce fait, il ne fonctionne pas. Vous devez définir
WorkedYears
avecint?
. Si votre point de vue, cette propriété obligatoire, vous devez définir la nouvelle catégorie "modèle de vue" où WorkedYears sera nulle et de gérer ce qui devrait cette propriété contient si votre base de données contient une valeur null.Corriger POCO pour EF:
Vue correcte modèle:
Votre contrôleur est responsable de la conversion de
User
<->UserModel
. Si vous voulez continuer à utiliser une seule classe, vous devez ajouter un deuxième qui n'est pas mappé propriété qui va utiliser à l'interne nullabe WorkedYears:Conclusion: Si votre base de données contient nullable champ qui peut contenir une valeur null, vous devez avoir nullable propriété dans votre mappé classe. Pas d'autre moyen.
Je suis sûr que Ladislav est exact qu'il n'y a pas d'autre moyen de lier la propriété d'un non nullable type de valeur. Si vous pensez à ce que le champ de base de données est en train de dire "il y a une valeur, ou la valeur null si elle n'est pas définie", c'est exactement ce que le type nullable permet. Vous pourriez explicitement de filtrer les entrées où le WorkedYears est null dans la requête... qui permettrait de contourner le "erreur". Sinon, Ladislav la suggestion d'un mappage de propriété seraient nécessaires qui, fondamentalement, définit une valeur "par défaut" qui est transparant pour l'appelant.
OriginalL'auteur Ladislav Mrnka