FluentNHibernate在不同的机器上表现不同

时间:2010-03-05 08:56:13

标签: fluent-nhibernate nhibernate-mapping

我遇到了FluentNHibernate的问题,我希望有人可以帮助我。

我在名为CampaignAreas和CampaignProducts的两个类之间存在多对多关系。可悲的是,Fluent不会将关系表映射到我的机器上与我的同事相同的表名。它分别命名为CampaignProductsToCampaignAreas和CampaignAreasToCampaignProducts。

我们有完全相同的代码版本,相同的NH版本,流利的等等。我们已经多次重建和重置IIS,所以它不是任何基本的东西。

任何想法如何解决这个问题?

3 个答案:

答案 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,但您应该能够指定多对多关系的表名。无论如何,这将更加清洁。