我将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(假),但没有效果。 我刚搬到新电脑。旧电脑:32位和新电脑VS2012:64位VS2015。 NHiberate版本是相同的(3.4.1.4)。数据库是MySQL 5.7(旧机器上我使用的是MySQL 5.5)。 这怎么可能?
答案 0 :(得分: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语句,解决了这个问题(这让我有了另一个挑战,如何在这个场景中创建一个跨三列的唯一索引,其中一列也有一个自己的(非唯一)索引。