Subsonic 3 - Insertar la actualización
-
27-10-2019 - |
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
}
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.