Search code examples
nhibernatefluent-nhibernatedomain-driven-design

Fluent NHibernate : How to map a 'Foreign Key' column in the mapping class


I'm starting to develop with Fluent NHiberate, and I was wondering how I create a defined 'Foreign Key' relationship in my Mapping class.

Here's my class. These classes are a one-to-one with associated tables.

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);
    }
}

In my mapping file, I want to create a defined foreign key relationship in my Song class SongArtistID column, which will define a foreign key to the ArtistID column in the Artist table/class.


Solution

  • Here you go:

    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);
            }
        }
    }
    

    That being said, it's easier using the Automapper configuration.