Свободный NHibernate: Как сопоставить столбец «Внешний ключ» в классе сопоставления - PullRequest
1 голос
/ 11 сентября 2010

Я начинаю разрабатывать с 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);
    }
}

В моем файле сопоставления я хочу создать определенное отношение внешнего ключа в столбце SongArtistID класса Song, который будет определять внешний ключ для столбца ArtistID в таблице / классе Artist.

Ответы [ 2 ]

7 голосов
/ 11 сентября 2010

Вот, пожалуйста:

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 .

2 голосов
/ 25 мая 2016

У меня есть вещи для работы с идентификаторами через next (проверено на моих сущностях, здесь просто переименованы вещи, и не было выполнено ни одного запуска, пожалуйста, попробуйте это как скороговорку):

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