我遇到了FluentNHibernate的问题,我希望有人可以帮助我。
我在名为CampaignAreas和CampaignProducts的两个类之间存在多对多关系。可悲的是,Fluent不会将关系表映射到我的机器上与我的同事相同的表名。它分别命名为CampaignProductsToCampaignAreas和CampaignAreasToCampaignProducts。
我们有完全相同的代码版本,相同的NH版本,流利的等等。我们已经多次重建和重置IIS,所以它不是任何基本的东西。
任何想法如何解决这个问题?
答案 0 :(得分:2)
根据您使用的Fluent NHibernate的版本,有一些竞争条件与双向多对多关系中的命名表; FNH过去常常选择它首先找到的关系中的任何一方,无论出于什么原因.Net会以不同的顺序给出它们(我们只需要调用Assembly.GetTypes()
)。
无论如何,我离题了。尝试升级到最新版本的FNH,我还建议您遵循Maggie's suggestion并使用约定来控制表命名。
答案 1 :(得分:1)
我使用此约定命名具有AutoMapping的多对多表
public class CustomManyToManyTableNameConvention : ManyToManyTableNameConvention
{
protected override string GetBiDirectionalTableName(IManyToManyCollectionInspector collection, IManyToManyCollectionInspector otherSide)
{
return String.Format("{1}{0}", collection.EntityType.Name, otherSide.EntityType.Name);
}
protected override string GetUniDirectionalTableName(IManyToManyCollectionInspector collection)
{
return String.Format("{1}{0}", collection.EntityType.Name, collection.ChildType.Name);
}
}
答案 2 :(得分:0)
我不知道Fluent,但您应该能够指定多对多关系的表名。无论如何,这将更加清洁。