2016-09-21 4 views
0

Ich verwende NHibernate mit ClassMapping. Ich habe einen Index für eine der Eigenschaften, wie folgt aus:NHibernate ClassMapping erstellt automatisch einen eindeutigen Schlüssel

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); 
      }); 

     } 
    } 

Dies erzeugt den Index ShopCountryCodeIdx genannt, aber ich habe auch einen eindeutigen Index ‚Countrycode‘ auf der gleichen Spalte genannt. Ich habe es mit einem ohne m.Unique (false) versucht, aber keine Effekte. Ich bin gerade auf einen neuen PC umgezogen. Alter PC: VS2012 auf 32bit und neuer PC: VS2015 auf 64bit. NHiberate Version ist auf beiden gleich (3.4.1.4). Die Datenbank ist MySQL 5.7 (auf der alten Maschine habe ich MySQL 5.5 verwendet). Wie ist das möglich?

+0

Ich wiederhole einfach den Code (mit Drop-Datenbank-Objekt etc) und neu erstellen Sie die Tabellen mit m.Unique (falsch). Das Ergebnis noch in einem extra Index 'CountryCode' (nicht eindeutig) Ich habe vergessen zu sagen, dass die Eigenschaft CountryCode existiert in ein paar mehr Objekte. Alle diese objektbezogenen Tabellen haben einen zusätzlichen Index 'CountryCode'. –

+0

Edit: laufen einige Caching-Probleme Ich denke, CountryCode-Index ist immer noch 'einzigartig' ... :( –

Antwort

0

Teil des Problems gefunden. Ich hatte in einer meiner anderen ClassMapping-Klassen einen eindeutigen Index über drei Spalten. Eine der beiden war auch eine CountryCode-Spalte. Das führt zu diesem seltsamen Verhalten.

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"); 
     }); 

Erste dieser m.UniqueKey Aussagen zu befreien, löste das Problem (die mich mit einer anderen Herausforderung lassen, wie in diesem Szenario einen eindeutigen Index auf drei Säulen, von denen eine Spalte hat auch eine eigene (nicht einzigartig zu schaffen) index ...

Verwandte Themen