2009-04-21 6 views
0

私は将来のメンテナーを助けるために、私がSubSonicを使用して書き換えているいくつかのレガシーコードを持っています。ほとんどの場合、すべてがストアドプロシージャコールを行うので、比較的単純です。しかし、今私は密接に結合したADO.NETコードでいくつかの問題を抱えています。SubSonicを使用してこのコードを書くにはどうすればいいですか?

コードは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を使い慣れているので、助けてください。すべての有益な回答がきれいにupvotedされます。

答えて

1

自動音声挿入/更新が具体的にはSqlDataAdapter.Update()メソッドによって行われるため、SubSonicを使用したその種のコードの正確な表現はありません。 SubSonicの名前空間のどこかに埋め込まれていれば、その使い方も知りたいです!

あなたが(例えば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です。私はそれが難しい方法を見つけました...

+0

コマンドプロンプトからコマンドオブジェクトを取得する方法があるかどうか知っていますか? SubSonicドコはそれほど欠けています。 ( –

+0

)私ができることは、SubSonicのコマンドオブジェクトSPs.StoredProcName()のバージョンを取得することです。コマンド - 役に立つかどうかわかりません。 –

+0

私はそれを見てきましたが、すべて私は例外を取得しようとしています。私はこれが戦う価値があるのか​​、それともそのままこのコードを残すべきかを判断しようとしています:/ –

関連する問題