Дозвуковая 3 - Вставка обновления - PullRequest
1 голос
/ 08 сентября 2011

В настоящее время используется Subsonic 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
 }

Ответы [ 2 ]

1 голос
/ 04 января 2012

Стандартные шаблоны ActiveRecord предоставляют метод Save (), который вызывает либо Add (), либо Update () в зависимости от того, является ли объект IsNew (). Он должен работать в приведенном вами примере.

0 голосов
/ 08 сентября 2011

Вы также должны быть в состоянии сделать это так:

            // 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).


Редактировать

О, извините, когда я впервые прочитал ваш вопрос, я подумал, что вы спрашиваете о более простом способе «Вставить» или «Обновить» , но после перечитывания я понял, что вы запрашивают «Вставить или обновить, если он уже существует» , например, выполнить «upsert».

Извините, мой ответ на самом деле не распространяется на это. Я тоже не знаю хорошего способа сделать это. Я обычно просто заканчиваю тем, что делаю, а вы пытаетесь выбрать это, и если я не получаю результатов, вставьте.

...