2011-12-26 11 views
1

SchemaExport(config).Build(true, true)でスキーマを生成するときに一意インデックスの名前を設定する方法はありますか?Fluent nHibernateでユニークなインデックスに名前を付ける方法はありますか?

私はマッピングクラスに設定しようとしました:、それはインデックスを設定しますが、名前を設定していないこの方法を

Map(x => x.Name) 
    .Length(50) 
    .Not.Nullable() 
    .UniqueKey("UNQ_InstitutionTypes_Name"); 

しかし。

+0

複数の行にまたがるコードを書式設定する場合は、各行の先頭に4つのスペースを付ける必要があります。バックティックは、1行のコードを対象としています。私の編集を参照してください。 – Amy

答えて

1

私が知る限り、方法はありません。私は以下の手法を用いてこの問題を解決しました。

あなたはSessionFactoryのは、あなたのセッションファクトリに追加の設定を適用するにはExposeConfigurationメソッドを使用して構築:

return Fluently.Configure() 
    .ProxyFactoryFactory(typeof(ProxyFactoryFactory)) 
    .Database(MsSqlConfiguration.MsSql2008.ConnectionString(connectionString) 
     .Mappings(m => 
     { 
      m.FluentMappings.AddFromAssemblyOf<Entities.BaseEntity>(); 
      m.FluentMappings.Conventions.AddFromAssemblyOf<Entities.BaseEntity>(); 
     }) 
     .ExposeConfiguration((cfg => BuildDatabase(cfg))) 
     .BuildSessionFactory(); 

private static void BuildDatabase(Configuration cfg, IDatabaseConfiguration configurationManager) 
{ 
    cfg.AddXmlFile(@"Mappings\Hbm\Indexes.hbm.xml"); 
    new SchemaExport(cfg).SetOutputFile(SchemaOutputFileName).Create(false, false); 
} 

実際Indexes.hbm.xmlファイルは次のようになります。

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <database-object> 
    <create> 
     CREATE NONCLUSTERED INDEX [Idx_TestRun_SerialNumber] ON [dbo].[TestRun] 
     (
     [SerialNumber] ASC 
    ) 
    </create> 
    <drop></drop> 
    </database-object> 
</hibernate-mapping> 

することができます任意の有効なSQL文を作成/削除文の中に入れます。これは、特定の順序で複数の列を持つ索引を作成する必要がある場合に便利です。

+0

おそらくこの答えは正しいですが、実際には私が使いたいと思うものではありません。スキーマの生成は素晴らしい機能ですが、100%使用することはできません。その大部分は手作業(または追加のスクリプト)で行う必要があります:UNQインデックス名、チェック制約などです。私の質問のために、私は、最高の答えはこのリンクにあると思う:http://fabiomaulo.blogspot.com/2011/07/nhibernate-playing-with-mapping-by-code.html – VikciaR