はじめに

「Kairyu.Extensions.Connection」を使用しています。
使い方については、「DBに接続するには?」を参照してください。

事前準備

1. 参照設定を追加

利用するには以下のプロジェクトを参照設定に加えてください。
Project file 必須 備考
Kairyu.vbproj 必須 フレームワークの基礎処理が記述されています。
Kairyu.Load.vbproj 必須 RelationObjectMapping処理が記述されています。
Kairyu.Extensions.Connection.vbproj 必須 DB接続の基底となる処理が記述されています。
Kairyu.Extensions.Connection.Oracle.vbproj 任意 Oracle接続の実ロジックが記述されています。
Kairyu.Extensions.Connection.SqlCe4.vbproj 任意 SqlServerCe4接続の実ロジックが記述されています。
Kairyu.Extensions.Connection.SqlCe35.vbproj 任意 SqlServerCe3.5接続の実ロジックが記述されています。
Kairyu.Extensions.IO.vbproj 必須 DB接続ロジックが記述されています。
  • 「任意」と書かれたファイルは使用するDBMSに合わせて必要なものだけを利用してください。
  • ここではプロジェクトファイルを参照していますが、「DLL」を参照しても構いません。

2. Modelクラス、テーブルを用意する。

こちらは「Code First(CREATE TABLE)するには?」を参照して、クラスとテーブルを作成します。
なお、こちらのページで作成されるクラスとテーブルは以下の通りです。

Prefecture.vb
''' <remarks></remarks>
Public Class Prefecture
    Public Property PrefectureID As Integer
    Public Property PrefectureName As String
End Class
テーブル:Prefectures
PK Column Name Type NULL
Y PrefectureID int N
PrefectureName nvarchar(100) N

使い方

まずは、全件取得の実例を挙げ、それを元に説明します。
VB.NET
0:  Imports Kairyu.Extensions.IO
0:  Imports Kairyu.Load
・・・
1:  Dim lst As List(Of Prefecture) = Nothing
2:  DB.Connect(
3:      Sub(r As ModelLoader)
4:          lst = r.From(Of Prefecture) _
5:              .ToList
6:      End Sub)
  • ORMのコードを記述するときは、拡張メソッドを使用するために「Kairyu.Load」をインポートしておいてください。

1行目はListの宣言です。特にフレームワークとは関係のない、普通のコードです。
2行目以降はフレームワークのコードです。これは以下のように処理されます。
  • 2行目:DB.Connectメソッドにて、DBへ接続。その後デリゲートを実行。
  • 4行目:ModelLoader.From(Of T)メソッドにて、PrefectureクラスのSELECT文を作成。
  • 5行目:Query(Of T).ToListメソッドにて、4行目のSELECT文を実行、検索結果をPrefectureクラスにマッピングし、List(Of Prefecture)として返却。
  • 6行目:DB.Connectメソッドが終了します。この時、DB接続を終了します。

これが基本です。
理屈を抜いて要点を簡単に説明すると、
  • DB.ConnectメソッドでO/Rマッピングを開始。
  • 同関数を実行するとModelLoaderというO/Rマッピングをするためのクラスが取得できる。
  • ModelLoaderのFrom(Of T)メソッドがSELECT文に相当。
  • ToListメソッドにて、O/Rマッピングが実行。
となります。

ToListメソッドが呼ばれるまでは、検索条件を付けたすことが可能です。
検索条件に使用できる関数は以下の通りです。

Function SQL
WhereEquals(e As Expression, value As Object) column = value
WhereNotEquals(e As Expression, value As Object) column <> value
WhereGreater(e As Expression, value As Object) value < column
WhereGreaterOrEqual(e As Expression, value As Object) value <= column
WhereLess(e As Expression, value As Object) column < value
WhereLessOrEqual(e As Expression, value As Object) column <= value
WhereBetween(e As Expression, val1 As Object, val2 As Object) column BETWEEN val1 AND val2
WhereIn(e As Expression, value() As Object) column IN (value1, value2, ... , valueN)
WhereNotIn(e As Expression, value() As Object) column NOT IN (value1, value2, ... , valueN)
WhereLike(e As Expression, value As Object) column LIKE value
WhereNotLike(e As Expression, value As Object) column NOT LIKE value

先程の例を「都道府県名の最後が”県”で終わっているデータを取得する」に変える場合は以下の通り。

VB.NET
0:  Imports Kairyu.Extensions.IO
0:  Imports Kairyu.Load
・・・
1:  Dim lst As List(Of Prefecture) = Nothing
2:  DB.Connect(
3:      Sub(r)
4:          lst = r.From(Of Prefecture) _
5:              .WhereLike(Function(x) x.PrefectureName, "%県") _
6:              .ToList()
7:      End Sub)

From(Of T)メソッドと、ToListメソッドの間にWhereLikeメソッド入れるだけです。
なお、From(Of T)メソッドと、ToListメソッドの間に入れた抽出条件の仕様は以下の通り。
  • 0~N個指定できます。
  • 複数存在する場合はANDで結合されます。

実際には

サンプルは行番号を記載したかったため、過剰に改行していますが、実際には以下のように記述できます。
VB.NET
Imports Kairyu.Extensions.IO
Imports Kairyu.Load
・・・
Dim lst As List(Of Prefecture) = Nothing
DB.Connect(Sub(r) lst = r.From(Of Prefecture).WhereLike(Function(x) x.PrefectureName, "%県").ToList)
Imports Kairyu.Extensions.IO
Imports Kairyu.Load
・・・
Dim lst = DB.Connect(Function(r) r.From(Of Prefecture).WhereLike(Function(x) x.PrefectureName, "%県").ToList)
  • どちらも結果は同じです。

Last edited Mar 12, 2013 at 4:01 PM by mk3008, version 3

Comments

No comments yet.