2016-09-21 3 views
0

Я использую NHibernate с ClassMapping. Я создал индекс по одному из свойств, как это: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, но я получил также уникальный индекс, называемый «CountryCode» на той же колонке. Я попробовал это без m.Unique (false), но никаких эффектов. Я просто перешел на новый компьютер. Старый компьютер: VS2012 на 32-м и новом ПК: VS2015 на 64-битной. Версия NHiberate работает одинаково (3.4.1.4). База данных - это MySQL 5.7 (на старой машине я использовал MySQL 5.5). Как это возможно?

+0

Я просто повторно запускаю код (с объектом базы данных перетаскивания и т. д.) и воссоздаю таблицы с помощью m.Unique (false). Это приводит к дополнительному индексу «CountryCode» (не уникальному). забыл сказать, что свойство CountryCode существует еще в нескольких объектах. Все эти связанные с объектами таблицы получили дополнительный индекс «CountryCode». –

+0

Редактирование: запускайте некоторые проблемы с кешированием Я думаю, индекс CountryCode по-прежнему «уникален» ... :( –

ответ

0

Часть проблемы. У меня в одном из моих других классов ClassMapping был уникальный индекс по трем столбцам. Один из них также был столбцом CountryCode. Это приводит к этому странному поведению.

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

Избавление от этих m.UniqueKey заявлений, решить эту проблему (что позвольте мне еще один вызов, как создать в этом сценарии уникальный индекс через три колонки, из которых один столбец имеет также собственный (не уникальный) index ...

Смежные вопросы