Повторное использование объекта базы данных в дозвуковой - PullRequest
0 голосов
/ 01 марта 2010

Еще один новый вопрос SubSonic / ActiveRecord. Предположим, я хочу вставить пару записей, в настоящее время я делаю это:

using (var scope = new System.Transactions.TransactionScope())
{
    // Insert company
    company c = new company();
    c.name = "ACME";
    c.Save();

    // Insert some options
    company_option o = new company_option();
    o.name = "ColorScheme";
    o.value = "Red";
    o.company_id = c.company_id;
    o.Save();
    o = new company_option();
    o.name = "PreferredMode";
    o.value = "Fast";
    o.company_id = c.company_id;
    o.Save();

    scope.Complete();
}

Проходя по этому коду, каждый из конструкторов company / company_option завершает работу и создает новый объект myappDB, который кажется просто расточительным.

Это рекомендуемый подход или я должен пытаться повторно использовать один объект БД - и если да, то какой самый простой способ сделать это?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2010

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

// Insert some options
company_option o1 = new company_option();
o1.name = "ColorScheme";
o1.value = "Red";
o1.company_id = c.company_id;
o1.Save();

company_option o2 = new company_option();
o2.name = "PreferredMode";
o2.value = "Fast";
o2.company_id = c.company_id;
o2.Save();

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

Если вы беспокоитесь о производительности, вы можете полностью пропустить создание объекта и сохранение части, используя запрос Insert:1006 *

http://www.subsonicproject.com/docs/Linq_Inserts

   db.Insert.Into<company_option>(
     x => x.name, 
     x => x.value,
     x => x.company_id)
    .Values(
        "ColorScheme",
        "Red",
        c.company_id
    ).Execute();
0 голосов
/ 12 мая 2010

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

Я не уверен, что тебе стоит беспокоиться. Это зависит от того, насколько плохо эти конструкторы причиняют тебе боль.

...