1

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 ...!

+0

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

+0

@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!). –

+0

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

Répondre

2

est peut-être en double ou quelque chose dans la ligne de celle-ci:

MVC binding form data problem

Je crains liant modèle personnalisé sera nécessaire. ;)

+0

Merci. La réponse de Jab à cette question était utile. –

+0

@mare: pouvez-vous mettre à jour votre lien pour qu'il pointe vers la question elle-même plutôt que vers votre réponse? Ensuite, je vais l'accepter. –

+0

ok, l'a fait. thx – mare

0

Vous pouvez utiliser une implémentation de classe partielle de votre entité qui implémente le gestionnaire modifié de propriété pour cette propriété particulière. Lorsque vous détectez que la propriété a été modifiée à NULL, modifiez-la simplement à string.Empty. De cette façon, à chaque fois que NULL est assigné à la propriété, il est réinitialisé à la chaîne vide.

+0

@tvanfosson: Je pourrais, mais alors je devrais répéter le même code des dizaines de fois (et pire - je créerais probablement les classes partielles juste pour le faire dans de nombreux cas). Voir ma propre réponse avec un lien vers une solution beaucoup plus propre. –

+0

Si c'est le comportement que vous voulez toujours, je suppose que cela ferait l'affaire. Il a cependant le problème inverse de stocker des chaînes vides, si la colonne est nullable. – tvanfosson

+0

true, si vous voulez modifier le classeur par défaut, mais la même réponse décrit également comment procéder par propriété en utilisant des annotations de données. –