EntityBuilderの拡張

次はフォーリンキーに対応したいです。

create table Employer (
    id integer primary key,
    name varchar(32)
);

create table Employee (
    id integer primary key,
    name varchar(32)
);

create table  EmploymentPeriod (
    id integer primary key,
    employeeID integer,
    employerID integer,
    constraint EmploymentPeriodFK0 foreign key (employerID) references Employer
    constraint EmploymentPeriodFK1 foreign key (employeeID) references Employee,
);

こんなテーブル定義があった場合は、以下のようなクラスを生成させる。

// テーブルと1対1
class Employer {
    int _id;
    public int ID {
        get { return _id; }
        set { _id = value; }
    }

    string _name;
    public string NAME {
        get { return _name; }
        set { _name = value; }
    }
}

// テーブルと1対1
class Employee {
    int _id;
    public int ID {
        get { return _id; }
        set { _id = value; }
    }

    string _name;
    public string NAME {
        get { return _name; }
        set { _name = value; }
    }
}

// テーブルと1対1
class EmploymentPeriod {
    int _id;
    public int ID {
        get { return _id; }
        set { _id = value; }
    }

    int _employerID;
    public int EMPLOYERID {
        get { return _employerID; }
        set { _employerID = value; }
    }

    int _employeeID;
    public int EMPLOYEEID {
        get { return _employeeID; }
        set { _employeeID = value; }
    }
}

// 結合テーブルクラス
// クラス名は自分と参照テーブルを繋げたものにする
class EmploymentPeriodEmployerEmployee {
    int _id;
    public int ID {
        get { return _id; }
        set { _id = value; }
    }

    // フォーリンキーから自動生成
    // プロパティはフォーリンキー名
    // 無名の場合は、参照先テーブル名
    Employer _employer;
    [Relno(0), Relkeys("EMPLOYERID:ID")]
    public Employer EmploymentPeriodFK0 {
        get { return _employer; }
        set { _employer = value; }
    }

    // 同様
    Employee _employee;
    [Relno(1), Relkeys("EMPLOYEE:ID")]
    public Employee EmploymentPeriodFK1 {
        get { return _employee; }
        set { _employee = value; }
    }
}

今月中に何とかしたいなぁ。