Как мне написать этот код, используя SubSonic? - PullRequest
0 голосов
/ 22 апреля 2009

У меня есть какой-то устаревший код, который я переписываю, используя SubSonic, чтобы помочь будущим сопровождающим. По большей части это было относительно просто, так как все делает вызов хранимой процедуры. Но теперь у меня возникли некоторые трудности с каким-то тесно связанным кодом ADO.NET.

Код зависит от SqlDataAdapter, чтобы решить, когда вызывать хранимый процесс INSERT или UPDATE, как я понимаю. Как я могу переписать этот код в SubSonic способом?

public void SaveInvoice(InvoiceItems invoiceItems)
{
    // extraneous code removed
    // invoiceItems is a dataset

    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "InvoiceItem_INSERT";
    cmd.Connection = conn;

    updateCmd.CommandType = CommandType.StoredProcedure;
    updateCmd.CommandText = "InvoiceItem_UPDATE";
    updateCmd.Connection = conn;

    SqlCommandBuilder.DeriveParameters(cmd);
    SqlCommandBuilder.DeriveParameters(updateCmd);

    adapter.InsertCommand = cmd;
    adapter.UpdateCommand = updateCmd;

    adapter.Update(invoiceItems._InvoiceItemTable);
}

Я новичок в SubSonic, поэтому любая помощь приветствуется. Все полезные ответы будут с радостью поддержаны.

1 Ответ

1 голос
/ 22 апреля 2009

Не будет точного представления такого рода кода с использованием SubSonic, потому что автоматическая вставка / обновление выполняется специально методом SqlDataAdapter.Update(). Если есть что-то, похороненное где-то в пространстве имен SubSonic, я также хотел бы знать, как его использовать!

Если вы имеете дело с одной таблицей (например, InvoiceItems), вы можете выполнить тест самостоятельно (для этого используется автоматически сгенерированная реализация активной записи SubSonic):

int key = InvoiceItems.ID; // not sure what your primary key identifier is called
InvoiceItem item = new InvoiceItem(key);
if (item != null)
{
    SPs.InvoiceItem_UPDATE(param1, param2, etc).Execute();
}
else 
{
    SPs.InvoiceItem_INSERT(param1, param2, etc).Execute();
}

Надеюсь, это поможет вам начать.

Как абсолютно не связанный sidenote, не полагается на DeepSave() метод , чтобы попытаться сэкономить на нескольких таблицах, потому что он не реализован. Я нашел это трудным путем ...

...