ホーム - 業務アプリ - 単体データモデル

単体データモデル

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