2017-05-30 3 views
1

Ich lade Daten von einer API, wo bestimmte Felder NULL Werte haben - was erwartet wird. Nachdem ich die Daten (Objekte) in die Liste geladen habe, überspringe ich die Liste und speichere jedes Objekt mit SQLProvider in der Datenbank.F # SQLProvider - Zuweisen von Nullwerten zu Feldern

for x in myList do 
    let item = db.Dbo.Item.Create() 
    item.Name <- x.Name 
    item.Description <- x.Description // Description might be NULL 

db.SubmitUpdates() 

Dies schlägt jedoch mit dem Fehler fehl, dass nicht alle Abfrageparameterwerte angegeben werden.

Als Workaround mache ich das jetzt unten, aber es wird wirklich nervig auf den Tabellen mit vielen Spalten.

if x.Description |> isNull |> not then 
    item.Description <- x.Description 

Gibt es eine Möglichkeit, diesen Null-Check zu vermeiden?

+0

Ich denke, die Verrohrung ist hier ein bisschen übertrieben, z. 'Wenn nicht (isNull xx) dann (doSomething with xx)' ist einfacher für die Augen. Einige der Ansätze, die Sie ausprobieren könnten, wären jedoch 1. filter myList, so dass es kein null x enthält, 2. Wenn Sie SQLprovider verwenden, könnten Sie versuchen, die optionals Option zu verwenden, sodass Sie mit Some arbeiten/None, und dann könnten Sie List.choose beispielsweise zum Filtern und Mappen auf die Some-Werte verwenden. – s952163

+1

@ s952163 Herausfiltern ist nicht wirklich akzeptabel. Ich habe es mit Dutzenden von Spalten zu tun, und die meisten davon können nullbar sein. Das Nichtvorhandensein von Werten in einigen Spalten ist ein gültiges Szenario, und ich sollte in der Lage sein, die Daten von Quellfeldern einfach in Ziel-DB-Spalten ohne irgendwelche Überprüfungen zu bringen. – Anil

+0

Vielleicht hilft Ihnen der in der anderen Frage erwähnte Parameter 'useOpTypes = true'. Ich lade viele der Daten in Nullable Spalten, wie Sie es behandeln, hängt davon ab, woher es kommt, wenn die Daten tatsächlich Nullwerte können Sie '.GetValueOrDefault()', so 'x.Description.GetValueOrDefault()' on es gibt auch 'Uncheked.defaultof <_>'. Idealerweise würde dies im DTO erledigt. – s952163

Antwort

2

F # und der SQL-Typ-Provider versuchen Option statt Nullable zu verwenden.
Ich habe normalerweise eine kleine Funktion zum Umwandeln von Null in None und Wert in Einige Wert.
Für weitere Details zum Thema siehe FSharp for fun and profit.

Verwandte Themen