単体データモデル
YWorks Software Framework(以下、YWSFと呼びます)では、単体形式(1レコード)のデータを取り扱うモデルとしてYCDbObjectクラスを用意しています。YWSFでは単体形式のデータを必要とする場合、YCDbObjectクラスを継承して個々のサブクラスを作成します。単体形式のデータは通常は単一のテーブルを参照し、データの変更(保存)に使用することを想定しています。YCDbObjectオブジェクトはキー項目(主キー)に関する値をKeyCodeプロパティに設定、取得できるようになっています。KeyCodeプロパティに設定されている主キーを持つデータレコードに対して参照や変更が行われます。
YCDbObjectクラスではSELECT文を記述するMakeSQLSelectメソッドについて、TableNameプロパティで返されるテーブルからKeyColumnNameプロパティで返されるキー項目がKeyプロパティに設定されている主キーデータであるレコードの全項目を取得するようにソースコードが書かれています。(すなわち「SELECT * FROM <テーブル> WHERE <キー項目> = '<主キーデータ>';」ということです。)ですので通常は、YCDbObjectのサブクラスでは、TableNameプロパティのオーバーライド(サブクラスでの実装)によるテーブル名の記述とKeyColumnNameプロパティのオーバーライドによるキー項目名の記述、KeyColumnLengthプロパティのオーバーライドによるキー項目の桁数の記述で使用することができます。ただし、主キーが複数項目からなるテーブル等、上記の仕様に合わない場合はMakeSQLSelectメソッド自体をオーバーライドしてください。下記にTableNameプロパティとKeyColumnNameプロパティのオーバーライドの例を示します。
//キー項目名 public override string KeyColumnName { get { return "ユーザID"; } } //キー項目の桁数 protected override int KeyColumnLength { get { return 20; } } //テーブル名 public override string TableName { get { return "Mユーザ"; } }
YCDbObjectクラスでは新規レコードの追加のためにIsNewプロパティとInitializeNewRowメソッド、GetNewKeyCodeメソッドを用意しています。YCDbObjectサブクラスのインスタンスの生成の際にIsNewプロパティをtrueに設定しておくとLoadメソッドが実行される際に新規追加レコードとしてインスタンスが取り扱われます。InitializeNewRowメソッドは新規レコードのデータ項目に初期値を設定するために使用します。GetNewKeyCodeメソッドは新規レコード作成時に自動採番によって主キーデータを取得する場合に使用します。主キーをユーザ自身が入力するときはKeyCodeプロパティを入力された値に設定してください。(この場合はGetNewKeyCodeメソッドはExceptionを返すように記述しておくと良いでしょう。)KeyCodeプロパティが設定されていない場合はGetNewKeyCodeプロパティが呼び出されますので、YCAutoNoManagerクラスを使用して主キーデータを取得してください。下記にInitializeNewRowメソッドとGetNewKeyCodeメソッドのサンプルコードを示します。
//新規行の初期化です。 protected override void InitializeNewRow(System.Data.DataRow newRow) { newRow["プライオリティ"] = 1; newRow["管理者フラグ"] = 0; newRow["ゲストフラグ"] = 0; newRow["削除フラグ"] = 0; } //主キーデータをユーザ入力する場合 public override string GetNewKeyCode() { throw new YCDbException("主キーデータの入力が不正です。"); } //主キーデータを自動採番する場合 public override string GetNewKeyCode() { return YCAutoNoManager.Instance.GetGuid().ToString(); }
YCDbObjectではコンストラクタとしてYCConnectionオブジェクトが必要になります。ですので、インスタンスを生成(new)する時には引数にYCConnectionオブジェクトを渡してください。通常はYCConnectionManager.Instance.Connectionをインスタンス生成時の引数に使用します。これはYCDbListにおいても同様です。
(例) YCDbObject obj = new YCDbObjectSubClass(YCConnectionManager.Instance.Connection);