What's Kairyu

Kairyu は、.NET用 Object Relation Mapping Framework (以下、ORM)です。
単調かつ大量に発生するObject Relation変換コーディングを減らすために作られました。

Code sample

VB.NET
Imports Kairyu.DCEngine
Imports Kairyu.Database

Public Class Test
    Public Property TestID As Integer
    Public Property TestName As String
End Class

Public Class Program
    Public Sub Save()
        Dim db As New SqlServerDB(My.Resources.SQL_SERVER_CNSTRING)
        db.Transact(
            Sub(r)
                'SELECT T0.TestID T0_0, T0.TestName T0_1, T0.TestDate T0_2
		'FROM   Test T0
		'WHERE  T0.TestID = '1' 
		c = r.Load(Of Test)(New Test With {.TestID = 1}).ToItem
		
		'Archive
		Dim s As New Storage(c)
		c.TestName = "Update"
		
		'UPDATE Test 
                'SET    TestName = 'Update1' 
                'WHERE  TestID = '1'
		r.Save(s.ToDirtyObjects(c))
            End Sub)
    End Sub
End Class
  • イメージのためSQL文をハードコーディングしたものを表示していますが、実際はパラメータクエリです。

Features

From "load" to "save"

読み込みから保存まで可能です。
Saveはダーティチェックされた結果が返されます。

Database connection exempt

DB接続処理はフレームワーク対象外です。別途実装してください。

VB.NET
Using cn As IDbConnection = New SqlClient.SqlConnection
    cn.ConnectionString = My.Resources.SQL_SERVER_CNSTRING
    cn.Open()
    'Instance Loader
    Dim r As New Kairyu.Database.Loader(cn, "@")
    'TODO
End Using

VB.NET
Dim db As New SqlServerDB(My.Resources.SQL_SERVER_CNSTRING)
db.Connect(
    Sub(r As Kairyu.Database.Loader)
        'TODO
    End Sub)

Handwriting SQL also welcome

Kairyuは全件検索、またはID検索のみに特化しているため、複雑な選択クエリには不向きです。
用途に応じて、Dapper、DataTableなどを併用してください。

VB.NET
Dim db As New SqlServerDB(My.Resources.SQL_SERVER_CNSTRING)
db.Connect(
    Sub(r)
        Dim cmd As IDbCommand = r.Connection.CreateCommand
        cmd.CommandText = "select current_timestamp"
        Dim d = cmd.ExecuteScalar()
        'TODO
    End Sub)

VB.NET
Dim db As New SqlServerDB(My.Resources.SQL_SERVER_CNSTRING)
db.Connect(
    Sub(r)
        Dim cn As IDbConnection = r.Connection
        'Dapper
        Dim c = cn.Query(Of Test)("select * from Test Where TestID = @ID", 
                                  New With {.ID = id})
        'TODO
    End Sub)

Convention over configuration

設定より規約。
規約に沿っている場合、特別な設定ファイルは必要ありません。
設定ファイルを用意することで独自ルールにすることも可能です。

Kairyu.DCEngine.KeyConstraint.config
<?xml version="1.0" encoding="utf-8"?>
<KeyConstraint xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <IdPropertyPattern>^(?&lt;myclass&gt;.*)ID$</IdPropertyPattern>
  <SeqPropertyPattern>^(?&lt;myclass&gt;.*)(Seq|SID)$</SeqPropertyPattern>
  <NRelationClassPattern>^(?&lt;parent1&gt;.+)(Combination|Inner|N)(?&lt;parent2&gt;.+)$</NRelationClassPattern>
</KeyConstraint>

Support optimistic locking

楽観的排他制御をサポートしています。

VB.NET
Public Class Test
    Public Property TestID As Integer
    Public Property TestName As String

    'Optimistic locking
    <VersionKey>
    Public Property Version As Integer
End Class

Public Sub Save()
    Dim db As New SqlServerDB(My.Resources.SQL_SERVER_CNSTRING)
    db.Transact(
        Sub(r)
            c = r.Load(New Test With {.TestID = 1}).ToItem
            Dim s As New Storage(c)
            c.TestName = "Update"

            'UPDATE Test 
            'SET    TestName = 'Update', Version = '2' 
            'WHERE  TestID = '1' AND Version = '1'
            r.Save(s, c)
        End Sub)
End Sub

Support SQL logging

標準ではSQL文のロギングはされませんが、イベントをフックすることでロギングが可能性です。
NLog、log4netなど、お好きなロギングツールをお使いください。

VB.NET
AddHandler DBCommandExtension.OnDBCommandLogging, 
           Sub(sender, e) Debug.Print(e.Command.CommandText)

Last edited Dec 28, 2014 at 2:26 PM by mk3008, version 27