Subsonic 3 - Inserto di aggiornamento
-
27-10-2019 - |
Domanda
Attualmente utilizzano Subsonic 3 con ActiveCord. Puramente per curiosità, esiste un modo semplice per aggiornare o inserire un record in modo pulito e di consice?
Invece di
var record = MyModal.SingleOrDefault(x => x.id == 1)
if (record != null)
{
// code to update record here
} else {
// code to insert a record here
MyModal record = new MyModal();
record.attribute1 = "blah"
... blah blah
}
Soluzione
I modelli standard ActiveCord forniscono un metodo salve (), che chiama add () o update () a seconda che l'oggetto siaNew (). Dovrebbe funzionare nel campione che hai dato.
Altri suggerimenti
Dovresti anche essere in grado di farlo in questo modo:
// perform insert with a linq expression
db.Insert.Into<PARTS_VI_PART_NUMBER>(
x => x.ITEM_NUMBER,
x => x.ITEM_CLASS_CODE,
x => x.ITEM_DESCRIPTION,
x => x.MANUFACTURER
).Values(
"TEST",
"TEST",
"TEST",
"TEST"
).Execute();
// update using linq expression
db.Update<PARTS_VI_PART_NUMBER>()
.Set(x => x.ITEM_DESCRIPTION == "UPDATED",
x => x.ITEM_CLASS_CODE == "UPDATED2")
.Where(x => x.ITEM_NUMBER == "TEST")
.Execute();
// delete inserted row with a linq expression
db.Delete<PARTS_VI_PART_NUMBER>(x => x.ITEM_NUMBER == "TEST").Execute();
Almeno questo è così che l'ho fatto in uno dei miei progetti. Il Insert()
, Update()
e Delete()
I metodi sono generati da Context.tt
dentro Context.cs
File (sto usando i file T4 "ActiveRecord").
Modificare
Oh mi dispiace, quando ho letto la tua domanda, pensavo che stessi chiedendo un modo più semplice "Inserisci" o "Aggiornamento", ma dopo averlo riletto, mi sono reso conto che stai chiedendo "Inserisci o aggiorna se esiste già" Come fare un "upsert".
Scusa, la mia risposta non lo copre davvero. Non so neanche un buon modo per farlo. Di solito finisco per fare quello che stai facendo ... prova a selezionarlo e se non ottengo risultati, fai l'inserto.