Рекомендации по дозвуковому пакетному запросу - PullRequest
0 голосов
/ 16 ноября 2009

привет, я бегу пакетная вставка с дозвуковой 3.0.0.3 и MVC, и я написал следующий пример:

var myquery1 = new Insert(provider).Into<orderitem>("orderitem_orderid", "orderitem_productid", "orderitem_qty", "orderitem_total",
                    "orderitem_sessionid", "orderitem_internal", "orderitem_measurement").Values("1", "1", "1", "0.00", "12345", "0", "1x1");
        batch.QueueForTransaction(myquery1);

        var myquery2 = new Insert(provider).Into<orderitem>("orderitem_orderid", "orderitem_productid", "orderitem_qty", "orderitem_total",
                    "orderitem_sessionid", "orderitem_internal", "orderitem_measurement").Values("2", "1", "1", "0.00", "12345", "0", "1x1");
        batch.QueueForTransaction(myquery2);

        batch.ExecuteTransaction();

это работает, и все в порядке, однако кто-нибудь знает, как я могу обойтись без перечисления всех имен столбцов, но вместо этого есть некоторая ссылка на дозвуковой класс для таблицы ???? а затем просто примите мои значения в правильном порядке.

вышесказанное работает, но выглядит немного неопрятно, и у меня есть таблицы намного больше, чем эта.

большое спасибо

Ответы [ 3 ]

1 голос
/ 16 ноября 2009

Похоже, вы хотите иметь возможность сделать что-то вроде:

var myquery1 = new Insert(provider).Into<orderitem>().Values("1", "1", "1", "0.00", "12345", "0", "1x1");

batch.QueueForTransaction(myquery1);

Однако это не сработает, и, честно говоря, на самом деле это тоже не рекомендуется. Причина, по которой это не сработает, заключается в том, что SubSonic не будет знать, какие значения сопоставить с какими столбцами в вашей таблице. Причина, по которой я не считаю это целесообразным, заключается в том, что любое изменение базовых таблиц может легко привести к вставке значений в неожиданные столбцы, а также фактический код очень непрозрачен. Это очень хорошо для тех, кто хорошо разбирается в базе данных, но если вы посмотрите на этот код с точки зрения обслуживания, невозможно легко сказать, что на самом деле происходит.

РЕДАКТИРОВАТЬ: Если вы хотите intellisense для имен столбцов, вы можете сделать следующее (проверьте Structs.cs, чтобы увидеть, что автоматически генерируется для имен ваших таблиц / столбцов):

var myquery1 = new Insert(provider).Into<orderitem>(OrderItemTable.ProductIdColumn).Values("1");

batch.QueueForTransaction(myquery1);
1 голос
/ 18 ноября 2009

Может быть, вы могли бы хотя бы "кэшировать" столбцы, в которые хотите вставить? Я забыл, разрешит ли вам params string[] сделать это или нет.

string[] columnlist = new string[] {"orderitem_orderid", "orderitem_productid", "orderitem_qty", "orderitem_total", "orderitem_sessionid", "orderitem_internal", "orderitem_measurement"};
var myquery1 = new Insert(provider).Into<orderitem>(columnList).Values("1", "1", "1", "0.00", "12345", "0", "1x1");
        batch.QueueForTransaction(myquery1);

        var myquery2 = new Insert(provider).Into<orderitem>(columnList).Values("2", "1", "1", "0.00", "12345", "0", "1x1");
        batch.QueueForTransaction(myquery2);

        batch.ExecuteTransaction();

Если это так, вы можете также попытаться преобразовать структуру Columns для таблицы в массив строк, но я не знаю, какие шаблоны 3.0 сгенерируют это, если таковые будут. (Все еще люблю 2.2 и не готов начать заново с 3.0)

0 голосов
/ 16 ноября 2009

Subsonic использует шаблон IActiveRecord , поэтому, если вы использовали шаблоны T4 для генерации объектов для вас, у вас должны быть классы для записей для ваших таблиц.

В активных классах записей просто создать новый класс, задать некоторые свойства и вызвать метод Add (), чтобы эффективно делать то, что вы делаете, гораздо более кратким образом.

Просто убедитесь, что у вас есть первичный ключ, установленный на вашей таблице, что ваши столбцы названы разумно, и вещи просто "просто работают" для вас .

Что-то вроде;

OrderItem item = new OrderItem();
item.Total = 24.32;
item.Qty = 3;
item.ItemID = 23;
item.CreatedBy = 'bjones';
item.Add();
...