Nullwert für Strings im Vergleich zu anderen Datentypen in Spalten, die zuerst vom Entity Framework-Code erstellt wurden

8

Wenn Sie eine Zeichenfolge in einer Klasse mit Code First definieren, erlaubt der Standardwert für die Spalten in der generierten Datenbank Nullwerte.

%Vor%

erstellt diese Spalte:

MyString (nvarchar (max), null)

Ich kann dies in "not null" ändern, indem ich das [Required] -Attribut oder die .IsRequired () -Methode in der Fluent-API verwende.

Der Standardwert für andere Datentypen lässt keine Nullwerte zu.

%Vor%

erstellt diese Spalten:

MyInt (int, nicht null)

MyDateTime (DatumZeit, nicht null)

MyFloat (real, nicht null)

MyDecimal (dezimal (18,2), nicht null)

MyBool (Bit, nicht null)

Ich kann diese ändern, um Nullen zuzulassen, indem ich die .IsOptional () -Methode in der Fluent-API verwende. Gibt es ein Attribut, das dasselbe tut?

Ich kann auch die Datentypen in der Klassendefinition ändern, um Nullen (int ?, DateTime? usw.) zuzulassen, was zu Spalten führt, die Nullen in der Datenbank zulassen.

Was ist der Grund dafür, Nullen standardmäßig für Strings zuzulassen, aber nicht für andere Datentypen?

    
Jon Crowell 19.03.2012, 13:32
quelle

2 Antworten

5

Sie haben das selbst beantwortet. Sie können keinen NULL-Verweis auf einen der anderen Datentypen haben, die Sie aufgelistet haben. Also, wenn der Code nicht mit einem NULL umgehen kann, dann wird es sicherstellen, dass die Datenbank dies ebenfalls erzwingt.

Nur, um dies vollkommen klar zu machen, da Sie sich speziell auf einen String im Vergleich zu anderen Werttypen konzentrieren. Hier ist der MDSN-Artikel zu Strings , wenn Sie danach suchen Null, Sie sehen diese Zeile:

  

Im Gegensatz dazu verweist eine Nullzeichenfolge nicht auf eine Instanz eines System.String-Objekts und jeder Versuch, eine Methode für eine Nullzeichenfolge aufzurufen, führt zu einer NullReferenceException

Wenn jedoch ein int nicht nullbar ist, wird niemals eine NullReferenceException ausgelöst, da dieser immer einen Standardwert haben muss.

    
Justin Pihony 19.03.2012, 13:39
quelle
1

Nützlich, um hinzuzufügen, dass nicht nur Strings in EF Code First, sondern auch Klassen nullbar sind.

    
magos 04.06.2014 13:36
quelle