Pregunta

Actualmente, utilizando Subsonic 3 con Activerecord. Puramente por curiosidad, ¿hay una manera fácil de actualizar o insertar un registro de manera limpia y consisal?

En vez de

 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
 }
¿Fue útil?

Solución

Las plantillas estándar de ActiveRecord proporcionan un método Save (), que llama a Add () o Update () dependiendo de si el objeto es ISNEW (). Debería funcionar en la muestra que dio.

Otros consejos

También deberías poder hacerlo así:

            // 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();

Al menos así es como lo he estado haciendo en uno de mis proyectos. los Insert(), Update() y Delete() los métodos se generan por Context.tt en el Context.cs Archivo (estoy usando los archivos T4 "ActiveRecord").


Editar

Oh, lo siento, cuando leí tu pregunta, pensé que estabas pidiendo una forma más fácil de "Insertar" o "Actualizar", pero después de volver a leerlo, me di cuenta de que estás pidiendo "Inserte o actualice si ya existe" como hacer un 'upsert'.

Lo siento, mi respuesta realmente no cubre eso. Tampoco sé una buena manera de hacerlo. Por lo general, termino haciendo lo que está haciendo ... intente seleccionarlo, y si no obtengo resultados, hago el inserto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top