代码之家  ›  专栏  ›  技术社区  ›  Robert S.

如何使用亚音速编写此代码?

  •  0
  • Robert S.  · 技术社区  · 15 年前

    我有一些遗留的代码,我正在使用子音速重写,以帮助未来的维护人员。在大多数情况下,它相对简单,因为所有操作都会进行存储过程调用。但是现在我在处理一些紧密耦合的ADO.NET代码时遇到了一些困难。

    代码依赖于sqldataadapter来决定何时调用insert或update存储过程,我理解这一点。我怎样才能用亚音速的方式重写这段代码?

    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);
    }
    

    我是新来的亚音速,所以任何帮助都很感谢。所有有帮助的答案都会被高估。

    1 回复  |  直到 15 年前
        1
  •  1
  •   John Rasch    15 年前

    由于automagic插入/更新是由 SqlDataAdapter.Update() 方法。如果在亚音速名称空间的某个地方隐藏着某种东西,我也想知道如何使用它!

    如果你要处理一张桌子(例如 InvoiceItems ,您可以自己进行测试(这将使用子音速自动生成的活动记录实现):

    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();
    }
    

    希望这能让你开始。

    作为一个完全无关的旁注, don't rely on the DeepSave() method 尝试跨多个表保存,因为它没有实现。我发现这很难…