Fluent NHibernate:如何映射映射类中的“外键”列

时间:2010-09-11 14:37:52

标签: nhibernate fluent-nhibernate domain-driven-design

我开始使用Fluent NHiberate开发,我想知道如何在Mapping类中创建定义的“外键”关系。

这是我的课。这些类是一对一的关联表。

public class Song
{
    public virtual int SongID{ get; private set; } //Primary Key
    public virtual int SongArtistID { get; set; } //Foreign Key mapping to 'Artist.ArtistID'
    public virtual string Title { get; set; }
}

public class Artist
{
    public virtual int ArtistID{ get; private set; } //Primary Key
    public virtual int ArtistName{ get; set; }
}

public class SongMapping : ClassMap<Song>
{
    SongMapping()
    {
        Id(c => c.SongID);//.GeneratedBy.HiLo("sermon"); is HiLo generator good?
        Map(c => c.SermonArtistID).Not.Nullable(); //How is this mapped to 'Artist.ArtistID'??
        Map(c => c.Title).Not.Nullable().Length(50);
    }
}

在我的映射文件中,我想在Song类SongArtistID列中创建一个已定义的外键关系,该列将定义Artist表/类中ArtistID列的外键。

2 个答案:

答案 0 :(得分:7)

你走了:

public class Song
{
    public virtual int Id { get; private set; } 
    public virtual Artist Artist { get; set; } 
    public virtual string Title { get; set; }

    public class SongMap : ClassMap<Song>
    {
        SongMap()
        {
            Id(c => c.Id);
            References(c => c.Artist);  // Yes, that's all.
            Map(c => c.Title).Not.Nullable().Length(50);
        }
    }
}

话虽如此,使用 Automapper configuration 会更容易。

答案 1 :(得分:2)

我可以通过下一步处理标识符(在我的实体上测试,这里只是重命名的东西,没有运行完成,请将其视为模式尝试):

References<Artist>(x => x.SongArtistID ).Column("SongArtistID").ForeignKey("ArtistID");