FluentNHibernate-自动映射生成不正确的一对多列键

FluentNHibernate-自动映射生成不正确的一对多列键,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,我是NHibernate和FNH的新手,正在尝试使用FluentNHibernate自动映射功能映射这些简单类: public class TVShow : Entity { public virtual string Title { get; set;} public virtual ICollection<Season> Seasons { get; protected set; } public TVShow() { Seas

我是NHibernate和FNH的新手,正在尝试使用FluentNHibernate自动映射功能映射这些简单类:

public class TVShow : Entity
{
    public virtual string Title { get; set;}
    public virtual ICollection<Season> Seasons { get; protected set; }


    public TVShow()
    {
        Seasons = new HashedSet<Season>();
    }

    public virtual void AddSeason(Season season)
    {
        season.TVShow = this;
        Seasons.Add(season);
    }

    public virtual void RemoveSeason(Season season)
    {
        if (!Seasons.Contains(season))
        {
            throw new InvalidOperationException("This TV Show does not contain the given season");
        }
        season.TVShow = null;
        Seasons.Remove(season);
    }
}
public class Season : Entity
{
    public virtual TVShow TVShow { get; set; }
    public virtual int Number { get; set; }
    public virtual IList<Episode> Episodes { get; set; }

    public Season()
    {
        Episodes = new List<Episode>();
    }

    public virtual void AddEpisode(Episode episode)
    {
        episode.Season = this;
        Episodes.Add(episode);
    }

    public virtual void RemoveEpisode(Episode episode)
    {
        if (!Episodes.Contains(episode))
        {
            throw new InvalidOperationException("Episode not found on this season");
        }
        episode.Season = null;
        Episodes.Remove(episode);
    }
}
我还使用了一些约定:

 public class MyForeignKeyConvention : IReferenceConvention
{

    #region IConvention<IManyToOneInspector,IManyToOneInstance> Members

    public void Apply(FluentNHibernate.Conventions.Instances.IManyToOneInstance instance)
    {
        instance.Column("fk_" + instance.Property.Name);
    }

    #endregion

}
问题在于FNH正在为四季酒店地图生成以下部分:

<bag name="Seasons">
  <key>
    <column name="TVShow_Id" />
  </key>
  <one-to-many class="TVShowsManager.Domain.Season, TVShowsManager.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>
上面的列名应该是fk_TVShow而不是TVShow_Id。如果修改FNH生成的hbm文件,则代码有效

有人知道怎么了吗


提前感谢。

您是否已在调试器中完成自动映射,以确保正在调用您的约定?
假设已正确连接,则可能需要实现Accept接口以供参考convention

是的,正在调用约定。此外,在季节类映射上,我可以看到以下映射: