URL: http://atnd.org/events/34622
自称Booistaのshinriyoです。mysqlとの連携は諦めましたよ。
「sqlite-net」を使わずに、古い「Mono.Data.Sqlite」でDataTableを使わなければいいし。
・Boo公式ドキュメント
http://boo.codehaus.org/NHibernate
NHibernateの公式ドキュメント
http://docs.codehaus.org/display/BOO/NHibernate
一字一句確認してませんが、”全く同じ”サンプルですね。
そもそもNHiberNateって何か?
URL: http://codezine.jp/article/detail/156
「NHibernateは、SQLを書かなくともテーブルのデータとクラスをシームレスに変換させるO/Rマッピング(Object/Relational Mapping)を実現できるため、コーディングの量を軽減することが可能」になるそうです。
DLLをダウンロードしようと思いましたが、
URL: http://sourceforge.net/projects/nhibernate/files/NHibernate/3.3.2GA/
の
「NHibernate-3.3.2.GA-src.zip」から落としました。
NHibernate-3.3.2.GA-src→lib→net→3.5にNHibernate.dllなどがあります。
以下の物が全て必要らしいですが、「HashCodeProvider.dll」だけ足りませんね、とりあえず「3.5」以下のをすべて入れてみました。
「Castle.DynamicProxy.dll」
「HashCodeProvider.dll」
「Iesi.Collections.dll」
「log4net.dll」
「NHibernate.dll」は「Plugins」ディレクトリにいれます。
Person.booを別ファイルにしたりと、例題と微妙に変えました。
まずオブジェクトの基本となるPersonクラス作ります。
・BooHibTest.boo
class Person: # these properties map to database fields [property(ID)] _id as int [property(Name)] _name as string # "business method" that return initials in name Initials as string: get: matches = /(?<!\w)\w/.Matches(_name) return join(matches, "")
・BooHibTest
import System.Text.RegularExpressions import NHibernate # business object class BooHibTest(MonoBehaviour): # initialise nHibernate stuff cfg = Cfg.Configuration() cfg.AddXmlFile("BooHibTest.hbm.xml") fact as NHibernate.ISessionFactory = cfg.BuildSessionFactory() sess as ISession = fact.OpenSession() # add "-san" to all names with an "x" in them xnames = sess.Find("from Person where Name like '%x%'") for p as Person in xnames: p.Name += "-san" print "$(p.Name) ($(p.Initials))" # update DB, close sess.Flush() sess.Close()
さらに、マッピング定義を記述します。
・BooHibTest.hbm.xml
→ .xmlだけでなく、.hbm.xml ですね
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.0"> <class name="BooHibTest.Person, BooHibTest" table="person"> <id name="ID" column="id" type="Int32"> <generator class="assigned" /> </id> <property name="Name" column= "name" type="String" length="100"/> </class> </hibernate-mapping>
現状こんなエラーのままですね。
「HashCodeProvider.dll」だけ足りなかったせいなのかもしれないので次回!
「HashCodeProvider.dll」どこかな?
Internal compiler error. See the console log for more information. output was: Unhandled Exception: System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded. at (wrapper managed-to-native) System.Reflection.Assembly:GetTypes (bool) at System.Reflection.Assembly.GetTypes () [0x00000] in <filename unknown>:0 at Mono.CSharp.RootNamespace.ComputeNamespaces (System.Reflection.Assembly assembly, System.Type extensionType) [0x00000] in <filename unknown>:0 at Mono.CSharp.RootNamespace.ComputeNamespace (Mono.CSharp.CompilerContext ctx, System.Type extensionType) [0x00000] in <filename unknown>:0 at Mono.CSharp.GlobalRootNamespace.ComputeNamespaces (Mono.CSharp.CompilerContext ctx) [0x00000] in <filename unknown>:0 at Mono.CSharp.Driver.LoadReferences () [0x00000] in <filename unknown>:0 at Mono.CSharp.Driver.Compile () [0x00000] in <filename unknown>:0 at Mono.CSharp.Driver.Main (System.String[] args) [0x00000] in <filename unknown>:0