有关亚音速批量插入查询的建议

时间:2009-11-16 13:49:22

标签: asp.net-mvc subsonic subsonic3

您正在使用亚音速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 个答案:

答案 0 :(得分:1)

听起来你希望能够做到这样的事情:

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

batch.QueueForTransaction(myquery1);

然而,这不起作用,说实话,这也不可取。它不起作用的原因是SubSonic不知道要映射到表中哪些列的值。我不相信它是明智的原因是对基础表的任何修改都很容易导致值插入到意外的列中,并且实际代码也非常不透明。对于熟悉数据库的人来说,这一切都非常好,但如果从维护的角度来看这些代码,就不可能轻易地告诉他们实际发生了什么。

编辑:如果你想要列名的智能感知,你可以执行以下操作(检查Structs.cs以查看为表/列名自动生成的内容):

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

batch.QueueForTransaction(myquery1);

答案 1 :(得分:1)

也许你至少可以“缓存”要插入的列?我忘记了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)

答案 2 :(得分:-1)

Subsonic使用IActiveRecord模式,所以如果您使用T4模板为您生成对象,那么您应该有表格的记录类。

在活动记录类上,简单地创建一个新类,设置一些属性并调用Add()方法以更简洁的方式有效地执行您所做的操作。

只需确保您的桌面上设置了主键,您的列名称正确且just "just work" for you

喜欢的东西;

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