Subsonic 3 - вставка обновления
-
27-10-2019 - |
Вопрос
В настоящее время используется дозвуковая 3 с Activerecord. Есть исключительно из любопытства, есть ли простой способ обновлять или вставить запись чистым и подходящим образом?
Вместо
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
}
Решение
Стандартные шаблоны ActiveRecord предоставляют метод сохранения (), который либо вызывает add (), либо Update () в зависимости от того, является ли объект inew (). Это должно работать в издании, который вы дали.
Другие советы
Вы также должны быть в состоянии сделать это так:
// 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();
По крайней мере, так я делаю это в одном из моих проектов. А Insert()
, Update()
а также Delete()
методы генерируются Context.tt
в Context.cs
Файл (я использую файлы «Activerecord» T4).
Редактировать
О, извините, когда я записал ваш вопрос, я подумал, что вы просите более простой способ "Вставьте" или "обновление", но после перечитывания, я понял, что вы просите «Вставьте или обновите, если это уже существует» Как делать «поднятие».
Извините, мой ответ на самом деле не покрывает это. Я тоже не знаю хорошего способа сделать это. Обычно я просто делаю то, что вы делаете ... попробуйте выбрать его, и если я не получу результатов, сделайте вставку.