VEUILLEZ NOTER: J'ai répondu à ma propre question avec un lien vers une réponse à une question similaire. J'accepterai cette réponse une fois que je serai autorisé (à moins que quelqu'un ne propose une meilleure réponse).ASP.NET MVC 2 RC2 Liaison de modèle avec la colonne NVARCHAR NOT NULL
J'ai une colonne de base de données définie comme NVARCHAR(1000) NOT NULL DEFAULT(N'')
- en d'autres termes, une colonne de texte non annulable avec une valeur par défaut de vide.
J'ai une classe model générée par le concepteur Linq-to-SQL Classes, qui identifie correctement la propriété comme étant et non. J'ai une TextAreaFor
à mon avis pour cette propriété. J'utilise UpdateModel
dans mon contrôleur pour extraire la valeur du formulaire et remplir l'objet de modèle.
Si je vois la page Web et laisse la zone de texte vide, UpdateModel
insiste pour définir la propriété sur NULL
au lieu de la chaîne vide. (Même si je définis la valeur à vide dans le code avant d'appeler UpdateModel
, il écrase toujours cela avec NULL
). Ce qui, bien sûr, provoque l'échec de la mise à jour de la base de données suivante.
Je pouvais vérifier toutes les propriétés pour NULL
après avoir appelé UpdateModel
, mais cela semble ridicule - il doit sûrement y avoir une meilleure façon?
S'il vous plaît ne me dites pas que j'ai besoin d'un classeur modèle personnalisé pour un scénario aussi simple ...!
En outre, je ne sais pas comment il faut désigner un type de chaîne "non nul", cela ne peut pas être possible, chaîne est le type de référence, il peut être nul. Que serait-ce si ce n'est pas nul? Chaîne vide? Bien sûr, string.empty est une option mais le Framework ne crée pas de chaînes vides par défaut quand vous faites, par exemple, une chaîne MyString; – mare
@mare: puisque j'utilise le concepteur VS2008 "Linq to SQL Classes" pour créer ma classe de modèle, il a une interface utilisateur qui me permet d'afficher les classes dans une vue de type "diagramme de base de données". Grâce à cela, je peux inspecter les propriétés des différentes tables et colonnes, et c'est là que je peux voir qu'il comprend que c'est une colonne non-nullable. Je ne vois pas pourquoi cela ne peut pas être reflété dans la classe générée (et en effet je ne vois pas pourquoi la valeur par défaut ne peut pas être reflétée là aussi!). –
Il faudrait implicitement savoir que lorsqu'une colonne SQL non nullable apparaît remplacer ses valeurs par défaut avec string.Empty. Je comprends que cela pourrait être utile dans votre cas et dans de nombreux autres cas mais apparemment (malheureusement) cela ne fonctionne pas comme ça. – mare