次のパターンに大まかに適合する一連のクラスがあります。
public class CustomerInfo {
public int Id {get; set;}
public string Name {get; set;}
}
public class CustomerTable {
public bool Insert(CustomerInfo info) { /*...*/ }
public bool Update(CustomerInfo info) { /*...*/ }
public CustomerInfo Get(int id) { /*...*/ }
/*...*/
}
挿入が成功すると、Insert メソッドは、渡された CustomerInfo オブジェクトの Id プロパティを設定します。私はこれらのクラスをいくつかの場所で使用しており、それらを変更したいと考えています。現在、レコードを挿入および更新するための ASP.NET ページの記述を試しています。現在、ObjectDataSource および FormView コントロールを使用しています。
<asp:ObjectDataSource
TypeName="CustomerTable"
DataObjectTypeName="CustomerInfo"
InsertMethod="Insert"
UpdateMethod="Update"
SelectMethod="Get"
/>
レコードを正常に挿入および更新できます。挿入が成功した後、FormView のモードを挿入から編集に切り替えたいと思います。私の最初の試みは、ItemInserted イベントでモードを切り替えることでした。
もちろん、これはうまくいきませんでした。もちろん、挿入時に設定されないIDにQueryStringParameterを使用していました。
そこで、ObjectDataSource の Selecting イベント中に InputParameters を手動で設定することに切り替えました。これに関する問題は、新しく挿入されたレコードの ID を知る必要があることですが、これを取得する良い方法が見つかりません。
Insert メソッドの戻り値にアクセスできること、および ItemInserted イベントの out パラメータにアクセスできることは理解しています。もちろん、私のメソッドはこれらのメソッドのいずれかを使用して ID を返しません。とにかく、挿入が完了した後に挿入された ID または CustomerInfo オブジェクトにアクセスする方法が見つかりません。
私ができる最善の方法は、CustomerInfo オブジェクトを ObjectDataSource の Inserting イベントに保存することです。
これはこれを行う奇妙な方法のように感じます。これを行うためのより良い方法があるに違いないと考えており、それを見ると自分を蹴ります。何か案は?