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
 }
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top