はじめに

KairyuでCode First をするには、拡張ツール「Kairyu.Extensions.DDL」が必要になります。

Kairyu.Extensions.DDL とは?

ソースコードからテーブルを生成することができるKairyuの拡張ツールです。
なお、同ツールのソースコードは、Kairyu本体に同梱されています。
  • 予め断っておきますが、現時点(ver0.1alpha)では、列構造のチェックを行っていませんので、テーブルが存在する場合は必ずテーブルがドロップされます。よって、データはすべて初期化されます。ご注意ください。
  • テーブルをドロップするため、それなりに危ない処理になります。本番環境では、TABLE DROP の権限を与えないなどの、なんらかの事故防止処置をとることをお勧めします。

事前準備

1. 参照設定を追加

利用するには以下のプロジェクトを参照設定に加えてください。
Project file 備考
Kairyu.Extensions.DDLvbproj テーブルの存在チェック、DROP、CREATE処理が記述されています。

2. Modelのコードを記述する

Code First なので、Modelのコードを先に記述しておいてください。
モデルの記述に関する規約は、「クラスの規約」、「プロパティの規約」を参照してください。

使い方

VB.NET
'cn … IDbConnection。既にインスタンスされており、コネクションもオープンしているものとします。
Dim f As New Kairyu.Extensions.DDL.SqlCe35.TableFactory
f.Create(cn, Kairyu.Extensions.DDL.TypeReader.Read("Modelクラスが格納されているバイナリファイル"))
  • IDbConnection のインスタンス方法がわからない場合、DBに接続するには?を参照してください。
  • Kairyu.Extensions.DDL.SqlCe35.TableFactory はSqlCe3.5用のDDL処理クラスです。
  • Kairyu.Extensions.DDL.TypeReader.Read は引数のバイナリファイルに格納されているクラスを列挙する関数です。フィルタをかけたい場合は、LINQなどを使用して独自にフィルタ処理を追加してください。
  • テーブル作成時、主キー制約、オートナンバー、ユニーク制約も自動生成されます。外部結合制約は作成されません。

参考

モデルとサンプルと、生成されるSQL文を以下に示します。(SQLCe3.5用)
VB.NET
''' <summary>
''' 都道府県クラス
''' </summary>
''' <remarks></remarks>
Public Class Prefecture
    Public Property PrefectureID As Integer
    Public Property PrefectureName As String
    Public Property PrefectureHiragana As String
End Class
SQL
SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE (TABLE_NAME = 'Prefectures')

DROP TABLE Prefectures

CREATE TABLE Prefectures (PrefectureID int NOT NULL, PrefectureName nvarchar(100) NOT NULL, PrefectureHiragana nvarchar(100) NOT NULL, CONSTRAINT PK_Prefectures PRIMARY KEY(PrefectureID))
  • 1.存在確認、2.存在すればDROP、3.生成という流れ。
  • テーブルが存在しない場合は、「2」の処理は走りません。
  • nvarcharのサイズが一律 100 になっていますが、サイズ指定がないと 100 を採用するようにしています。変更したい場合は、ColumnDefinitionAttributeクラスを使用してサイズ指定を行ってください。
  • VB.NET型とDBMSの列型の変換は、Kairyu.Extensions.DDL で行っていますので、変更したい場合はこちらのソースコードを参照してください。

おまけ

サンプルデータ。
SQL
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (1, '北海道', 'ほっかいどう');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (2, '青森県', 'あおもりけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (3, '岩手県', 'いわてけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (4, '宮城県', 'みやぎけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (5, '秋田県', 'あきたけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (6, '山形県', 'やまがたけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (7, '福島県', 'ふくしまけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (8, '茨城県', 'いばらきけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (9, '栃木県', 'とちぎけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (10, '群馬県', 'ぐんまけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (11, '埼玉県', 'さいたまけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (12, '千葉県', 'ちばけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (13, '東京都', 'とうきょうと');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (14, '神奈川県', 'かながわけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (15, '新潟県', 'にいがたけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (16, '富山県', 'とやまけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (17, '石川県', 'いしかわけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (18, '福井県', 'ふくいけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (19, '山梨県', 'やまなしけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (20, '長野県', 'ながのけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (21, '岐阜県', 'ぎふけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (22, '静岡県', 'しずおかけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (23, '愛知県', 'あいちけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (24, '三重県', 'みえけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (25, '滋賀県', 'しがけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (26, '京都府', 'きょうとふ');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (27, '大阪府', 'おおさかふ');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (28, '兵庫県', 'ひょうごけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (29, '奈良県', 'ならけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (30, '和歌山県', 'わかやまけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (31, '鳥取県', 'とっとりけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (32, '島根県', 'しまねけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (33, '岡山県', 'おかやまけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (34, '広島県', 'ひろしまけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (35, '山口県', 'やまぐちけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (36, '徳島県', 'とくしまけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (37, '香川県', 'かがわけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (38, '愛媛県', 'えひめけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (39, '高知県', 'こうちけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (40, '福岡県', 'ふくおかけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (41, '佐賀県', 'さがけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (42, '長崎県', 'ながさきけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (43, '熊本県', 'くまもとけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (44, '大分県', 'おおいたけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (45, '宮崎県', 'みやざきけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (46, '鹿児島県', 'かごしまけん');
INSERT INTO Prefectures (PrefectureID, PrefectureName, PrefectureHiragana) VALUES (47, '沖縄県', 'おきなわけん');

Last edited Mar 10, 2013 at 5:23 AM by mk3008, version 7

Comments

No comments yet.