2016-05-12 9 views
0

Ich arbeite an einer iOS App mit Xamarin. Ich verwende das sqlite-net ORM, um mit meiner Datenbank zu interagieren.Wie unterscheidet man zwischen NULL Daten und 0 in sqlite-net?

Mit einer Integer-Spalte gibt das ORM einen Int32 Wert zurück. Der Wert in dieser Spalte kann jedoch NULL sein. Und ich habe festgestellt, dass in diesem Fall 0 statt NULL zurückgegeben wird, da es unmöglich ist, einen int auf NULL zu setzen.

Zum Beispiel mit dem folgenden Code:

public class Client 
{ 
    public Client() 
    { 
    } 

    [PrimaryKey, Column("ID")] 
    public string ID{ get; set;} 

    public string FirstName{ get; set;} 
    public string LastName{ get; set;} 
    public int Age{ get; set;} 
} 

Wenn die ID korrekt ist, aber der Vorname, Nachname und Alter sind auf NULL, das zurückgegebene Objekt wird in den Feldern Vornamen und Nachnamen null hat, die ist logisch. Aber das Alter wird auf Null gesetzt. So kann ich nicht wissen, ob der Wert NULL oder wirklich 0 ist. Gibt es eine Möglichkeit, diese Fälle zu unterscheiden?

+0

Jede Chance, zu erklären Alter als '' int? –

+0

Ich bin mir nicht sicher zu verstehen, was Sie meinen, Alter ist bereits als int –

+0

NULL gekennzeichnet oder int? wurde in C# 2.0 eingeführt – Jason

Antwort

2

Im Idealfall sagt uns Ihre Client-Klasse, dass "Age" eine nicht nullbare Eigenschaft ist. Aber was hier wichtig ist, ist, dass "Age", eine Ganzzahl zu sein, tatsächlich ein Werttyp ist.

Werttypen dürfen keinen Nullwert enthalten. Außer mit "?" oder "Nullable <>" wie bereits erwähnt.

In .NET Zeichenfolge ist eigentlich kein Werttyp, sondern ein Referenztyp.

Also, deshalb erhalten Sie einen Null-Wert für Ihre String-Eigenschaften, aber nicht für Ihre Integer-Eigenschaft.

Eine andere Sache zu beachten, ist SQLite.NET standardmäßig erstellt Nullable Spalten, um eine nicht Nullable Spalte zu erzwingen ist das Attribut hinzufügen: [NotNullAttribute] über Ihre Eigenschaft.

Die einzige warum „Alter“ zu ermöglichen, von der Datenbank zurückgegeben werden, da eine Null der folgenden Eigenschaften zu schreiben ist:

public class Client 
{ 
public Client() 
{ 
} 

public Nullable<int> Age{ get; set;} 
//public int? Age { get; set; } 
} 
+0

Danke, es hat funktioniert! Mein Fehler kam von der Tatsache, dass ich in meinem Code (nicht die Probe, die ich in die Frage gestellt habe) Nullable hatte. Und ich hatte einen Fehler, da es nicht möglich war, den Rückgabetyp auf Nullable zu konvertieren. Also dachte ich, dass es ein Int32 zurückgibt, und deshalb konnte es NULL nicht zurückgeben. –