管理

読み込み処理は Kairyu.ColumnAttributeReader です。
実処理は Kairyu.ColumnAttributeFactory です。
  • ColumnAttributeReader はラッパークラスで、実ロジックは何も管理していません。関数の名前定義がしてあるだけです。同関数には ColumnAttributeFactory にある実ロジックへのアドレスが登録されています。

対象プロパティ

ReadOnlyでなく、WriteOnlyでないのプロパティは全てマッピング対象となります。
  • Ignore属性を付けることで強制的にマッピング対象から外すことも可能。

列マッピング対象プロパティ

プロパティの型が以下の条件のいずれかを満たすと、列と解釈されます。
  • String
  • Byte[]
  • IEnumerableインターフェイスを実装していない

親テーブルマッピング対象プロパティ

プロパティの型が以下の条件を全て満たすと、親テーブルへのリレーションと解釈されます。
  • 型名がSystemで始まっていない
  • ジェネリック型でない

子テーブルマッピング対象プロパティ

プロパティの型が以下の条件を全て満たすと、子テーブルへのリレーションと解釈されます。
  • IListインターフェイスを実装している
  • ジェネリック型

列名

プロパティ名がそのまま列名になります。
プロパティ名に使用された大文字、小文字はそのまま使用されます。
  • Oracleなどのテーブル名の大文字、小文字を区別しないDBMSの場合、単語の区切りがよくわからなくなりますので、名前生成処理を差し込んでください。

主キー

プロパティ名が以下の条件のいずれかを満たすと主キーと解釈されます。
  • Id
  • ID
  • クラス名+Id
  • クラス名+ID

特殊列

追加タイムスタンプ

プロパティ名が以下の条件のいずれかを満たすと追加タイプスタンプ列と解釈されます。
  • CreateTimestamp
  • CreatedTimestamp

更新タイムスタンプ

プロパティ名が以下の条件のいずれかを満たすと更新タイプスタンプ列と解釈されます。
  • UpdateTimestamp
  • UpdatedTimestamp

バージョンキー

プロパティ名が以下の条件のいずれかを満たすと更新タイプスタンプ列と解釈されます。
  • VersionKey
  • LockVersion

リレーション

親テーブルへのリレーション

プロパティの型から結合先を求め、結合先の主キー列名を求めます。
そして、その列名が自テーブルにもあると解釈します。

記述例
Public Class Sample1
    Public Property Sample1ID As Integer
    Public Property Sample2 As Sample2
End Class
Public Class Sample2
    Public Property Sample2ID As Integer
End Class
この場合、以下のテーブルが存在すると解釈されます。

Sample1s
PK ColumnName Remaks
Y Sample1ID
Sample2ID Sample2sテーブルとリレーションをするために必要な列。

Sample2s
PK ColumnName Remaks
Y Sample2ID


結合条件は、以下のようになります。
  • Sample1s.Sample2ID = Sample2s.Sample2ID

ただし、以下の点に注意してください。
  • Sample1クラスに、Sample2IDプロパティを作ってはいけません。
  • Sample1クラスに、プロパティの型がSample2になっているプロパティが複数存在してはいけません。
    • 手動で関連条件を指定すれば回避可能です。

また、接頭語にも対応しています。以下に例を挙げます。
Public Class Sample1
    Public Property Sample1ID As Integer
    Public Property XSample2 As Sample2 'Xが接頭語
End Class
Sample1s
PK ColumnName Remaks
Y Sample1ID
XSample2ID 接頭語Xが反映される。


子テーブルへのリレーション

プロパティのジェネリック型から結合先を求め、結合先を求めます。
そこからは「親テーブルへのリレーション」を求めた時と逆を行うことになります。

記述例
Public Class Sample2
    Public Property Sample2ID As Integer
    Public Property Sample1s As ICollection(Of Sample1) '[A]
End Class
Public Class Sample1
    Public Property Sample1ID As Integer
    Public Property Sample2 As Sample2 '[B]
End Class

ただし、以下の点に注意してください。
  • Sample1クラスに、プロパティの型がSample2になっているプロパティが1つ存在しなくてはいけなません。
    • 親リレーションをする際に子リレーションは必要ありませんが、子リレーションを行うには親リレーションが必要になります。("A"のコードを書いた場合、必ず"B"のコードが必要になります。しかし、"B"のコードを書いた場合、"A"のコードはなくても構いません。)
    • 手動で関連条件を指定すれば1つ以上存在していても可。

Last edited Jan 19, 2013 at 8:20 AM by mk3008, version 7

Comments

No comments yet.