Tach!
in der Tabelle sind einige der Ferlser als Nullabel = NO definiert. Das überträgt sich auch eventuell auf das Model (Meinst du das?).
Ja. Non-Nullable-Felder können keine leeren Eingaben speichern. Bei Integer ist das klar, da muss man mindestens eine 0 eingeben. Ein leeres Eingabefeld würde zu null und das geht ja nicht ins DBMS einzutragen. Bei Stringfeldern ist das ähnlich, ein Leerstring wird zu null umgewandelt. Aus Datenbanksicht ist ein Leerstring zwar ein von NULL verschiedener Wert, die hätte also kein Problem. Aber das Entity Framework hat nicht so recht eine Chance, einen Null-Wert in einer Eingabe zu erkennen. Es gibt schließlich kein NULL in HTML. Und ein leeres Input-Feld ergibt in den POST/GET-Daten zumindest einen Eintrag mit Feldnamen und keinem Wert. So nimmt man dann den Leerstring und macht daraus ein null. Dieses kann nun nicht in der Datenbank abgelegt werden, weswegen ein Speicherversuch zu einer Exception führt. Ich lass dann dem Varchar-Feld sein NULLable und hab meine Ruhe. Wenn du nun unbedingt drauf angewiesen bist, im DBMS zwischen NULL und Leerstring zu unterscheiden, dann müsstest du dich selbst mal auf Lösungssuche begeben.
Das Nullable=false im Integer-Feld jedenfalls sorgt dafür, dass sich das Model schon selbst beschwert, ohne dass du da eine Validierungsgeschichte hinzufügst. Wenn du den Meldungstext ändern willst, musst du dazu dem Feld im Model eine Data Annotation hinzufügen: ein Required-Attribut mit ErrorMessage-Parameter.
In der Klasse, wo ich das Verbindung-Fled steht, stehen auch andere Felder, für die auch andere Bedingungen gelten. Das erklärt aber nicht das seltsame Verhalten der Valisierung. Was ich auch eben nicht verstehe, wie bereits erwähnt, ist der Wert der Felder. Ich kann mir nicht vorsettel, dass ein Feld seinen Wert behält, obwohl im Feld nichts drin ist.
Definiere "behält". Wie hast du das beobachtet? Wenn beispielsweise das Speichern wegen der NULL-Geschichte misslingt und du die Exteption mundtot gemacht hast, bleibt der Wert im DBMS natürlich unverändert, ohne dass du dazu was siehst.
Ich habe das Ganze noch einmal überprüft. Wie es scheint wird das Objekt, das ich mir aus der Datenbank hole (Infos info = getInfo(id)), bei UpdateModel(info) nicht richtig upgedatet.
Das sollte sich in irgendeiner Form bemerkbar machen, entweder durch eine Exception oder durch einen Rückgabewert.
dedlfix.