Stored procedures 如何使用亚音速编写此代码?
我有一些遗留代码,我正在使用亚音速重写,以帮助未来的维护人员。在大多数情况下,它是相对简单的,因为所有东西都进行存储过程调用。但是现在我在使用紧密耦合的ADO.NET代码时遇到了一些困难 代码取决于SqlDataAdapter来决定何时调用INSERT或UPDATE stored proc,我理解这一点。如何以亚音速方式重写此代码Stored procedures 如何使用亚音速编写此代码?,stored-procedures,ado.net,subsonic,Stored Procedures,Ado.net,Subsonic,我有一些遗留代码,我正在使用亚音速重写,以帮助未来的维护人员。在大多数情况下,它是相对简单的,因为所有东西都进行存储过程调用。但是现在我在使用紧密耦合的ADO.NET代码时遇到了一些困难 代码取决于SqlDataAdapter来决定何时调用INSERT或UPDATE stored proc,我理解这一点。如何以亚音速方式重写此代码 public void SaveInvoice(InvoiceItems invoiceItems) { // extraneous code removed
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);
}
我是亚音速新手,非常感谢您的帮助。所有有帮助的答案都将被愉快地向上投票。由于automagic插入/更新是通过
SqlDataAdapter.update()
方法专门完成的,因此不会使用亚音速精确表示此类代码。如果在亚音速名称空间的某个地方有,我也想知道如何使用它
如果您正在处理一个表(例如,InvoiceItems
),您可以自己进行测试(这使用亚音速自动生成的活动记录实现):
希望这能让你开始
作为一个完全不相关的旁注,尝试跨多个表进行保存,因为它没有实现。我发现这很难…你知道有没有办法从存储的进程中获取命令对象?亚音速doco非常缺乏:(我相信你能做的最好的事情就是得到亚音速版本的命令对象SPs.StoredProcName().Command-我不知道这是否有用。我一直在考虑这个问题,但每次我尝试使用它时,我都会遇到一个例外。我正在努力决定这是否值得争取,或者我是否应该保持这段代码的原样。:/Yeah,特别是因为它已经起作用了,而且似乎很简单,除非你你正在完全转向亚音速
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();
}