2009-05-01 6 views
2

自分のプロジェクトで自分のドメインオブジェクトにNHibernateを実装したいのですが、マッピングファイルとデータベースの生成方法についてはわかりません。ドメインロジックからNHibernateマッピングファイルとDB構造を生成する方法はありますか?

このherehereに触れるような質問がいくつか見つかりましたが、私のクラスは既に定義されていますから、それらのクラスから開始して、下方向に作業したいと思います。

これを行う方法はありますか?

私は多段階プロセスで完璧ですが、私は他の人たちが成功したことを知りたいだけです。

はFYI、私はFluent-NHibernateが好きSQL Server 2005の

答えて

2

が好きRoRのようなものです: あなたはゲイリーのような流暢マッピングでマッピングを作成することができます。

var sessionFactory = Fluently.Configure() 
    .Database(MsSqlConfiguration.MsSql2005 
    .ConnectionString(c => c 
     .Is(ApplicationConnectionString))) 
    .Mappings(m => 
    m.AutoMappings.Add(AutoPersistenceModel.MapEntitiesFromAssemblyOf<Product>()) 
    ) 
    .BuildSessionFactory(); 

そして、それはあなたが必要とするすべてです:あなたは非常に単純ドメインモデルを持っている場合は は、あなたが自動マッピング、FluentNhibernateの大会ベースのマッピング機能を使用することができます。

あなたはSchemaExportのを使用してデータベースを構築することができます流暢ため

var schemaExport = new SchemaExport(configuration); 
schemaExport.Create(false,true); 
+0

"複雑ではない"ドメインモデルと言えば、まさにそれが意味することに関するメトリックはありますか?たとえば、1レベルの深い関係だけを言ってください。循環参照はありませんか? – Joseph

+0

SchemaExportのアイデアをお寄せいただきありがとうございます。それはまさに私がデータベースビルディングに関して探していたものです。 – Joseph

+0

循環参照はできますが、従来のdbスキーマ、usertypes、sqlの数式マッピング、および "手動の"流暢nhibernateでサポートされている他の多くのオプションはサポートされません。自動マッピングは緑地のアプリケーションで永続性を早く開始するオプションですが、アプリが成長したり他の誰かからアプリを継承したりするときは、マッピングについてより具体的にしたいと思うかもしれませんし、 "手動の"流暢なnhibernateやhbm .xml – Paco

2

上のデータベースを展開します。 Userクラスのマッピングについては下記の例を参照してください。もちろんXMLを使用することもできます。

lamda式のx値は、ドメインクラスを表します。

これは非常に私は非常に多くのマッピングについて

public sealed class UserMap : ClassMap<User>, IMapGenerator 
    { 
     public UserMap() 
     { 
      Id(x => x.Id) 
       .WithUnsavedValue(0); 
      Map(x => x.Username).TheColumnNameIs("UserName"); 
      Map(x => x.Password).TheColumnNameIs("Password"); 
      Map(x => x.Salt).ReadOnly(); 

      Map(x => x.CreatedOn).ReadOnly(); 
      Map(x => x.CreatedBy).ReadOnly(); 
      Map(x => x.CreatedAt).ReadOnly(); 

      Map(x => x.ApprovalStatus) 
       .TheColumnNameIs("ApprovalStatusId") 
       .CustomTypeIs(typeof(ApprovalStatus)); 

      Map(x => x.DeletionStatus) 
       .TheColumnNameIs("DeletionStatusId") 
       .CustomTypeIs(typeof(DeletionStatus)); 

      References(x => x.Role).Not.Nullable(); 
      References(x => x.Contact); 

     } 

     #region IMapGenerator Members 

     public System.Xml.XmlDocument Generate() 
     { 
      return CreateMapping(new MappingVisitor()); 
     } 

     #endregion 
    } 
+0

+1を。私は以前これについて読んだことがあります。しかし、NHibernateのすべての機能がFluentに含まれているのか、それともかなり後ろ向きになっているのでしょうか? – Joseph

+0

もう1つの質問ですが、Fluentを使用すると、データベースの作成についてどうしたらいいですか? Fluentはマッピングの問題のみを解決します。 – Joseph

+0

互換性や機能セットに問題はありませんでした。 Pacoは、あなたが他のものを持っているかどうか私に知らせる生成する質問に答えました。 – Gary

関連する問題