2016-09-21 10 views
0

私はClassMappingでNHibernateを使用します。私はこのような特性の一つ、上のインデックスを作成しました:NHibernate ClassMappingは自動的にユニークなキーを作成します

public class ShopMapping : ClassMapping<Shop> 
    { 
     public ShopMapping() 
     { 
      Table("Shops"); 
      Id(p => p.Id, m => m.Generator(NHibernate.Mapping.ByCode.Generators.GuidComb)); 

      Property(p => p.CountryCode, m => 
      { 
       m.Length(10); 
       m.NotNullable(true); 
       m.Index("ShopCountryCodeIdx"); 
       m.Unique(false); 
      }); 

     } 
    } 

これはShopCountryCodeIdxと呼ばれるインデックスを生成しますが、私はまた、同じ列に「国番号」と呼ばれる一意のインデックスを、得ました。私はm.Unique(偽)なしでそれを試しましたが、効果はありません。 私はちょうど新しいPCに移動しました。古いPC:32ビットと新しいPCのVS2012:64ビットのVS2015。 NHiberateのバージョンは両方とも同じです(3.4.1.4)。データベースはMySQL 5.7です(古いマシンではMySQL 5.5を使用しました)。 これはどのように可能ですか?

+0

私はコードを(データベースオブジェクトをドロップして)再実行し、m.Unique(false)を使用してテーブルを再作成しますが、これは余分なインデックス 'CountryCode'これらのオブジェクト関連のテーブルには、「CountryCode」のインデックスが追加されています。 –

+0

編集:いくつかのキャッシュ問題が発生します.CourternCodeインデックスはまだ 'ユニーク'です... :( –

答えて

0

問題の一部が見つかりました。他のClassMappingクラスの3つの列に一意のインデックスを持っていました。そのうち1つはCountryCode列でした。その結果、この奇妙な行動が起こります。これらm.UniqueKey文退治

Property(p => p.CountryCode, m => 
     { 
      m.Length(10); 
      m.NotNullable(true); 
      m.Index("PanelShopCountryCodeIdx"); 
      //m.UniqueKey("UK_psPanelShopnrIdx"); 
     }); 
     Property(p => p.ShopNr, m => 
     { 
      m.Length(25); 
      m.NotNullable(true); 
      //m.UniqueKey("UK_psPanelShopnrIdx"); 
     }); 
     Property(p => p.PanelCode, m => 
     { 
      m.Length(25); 
      m.NotNullable(true); 
      // m.UniqueKey("UK_psPanelShopnrIdx"); 
     }); 

、このシナリオでは1列でも独自のものを持って、そこから3つの列全体で一意のインデックス(非ユニークを作成する方法を別の課題とさせて頂いて問題を(解決)index ...

関連する問題