Как мне сопоставить объединение таблиц в NHibernate / Fluent NHibernate, который использует уникальный ключ вместо первичного ключа? - PullRequest
0 голосов
/ 02 июня 2011

У меня есть эти таблицы в моей базе данных SQL Server. MemberCv - это устаревшая таблица, которую мы не можем изменить, поэтому мы используем сопоставление NHibernate join для сопоставления дополнительных столбцов, необходимых для новой функции:

MemberCv (
    MemberId varchar -- part of composite key,
    PublicationCode int -- part of composite key,
    PictureFileName varchar -- UNIQUE KEY constraint UK_PictureFileName
)

PhotoSTatus (
    FileName varchar -- primary key,
    IsHidden bit,
    Sequence int
)

и итоговый класс C # будет выглядеть так:

public class MemberCv {
    public Member Member { get; set; }
    public Publication Publication { get; set; }
    public string FileName { get; set; }
    public int IsHidden { get; set; }
    public int Sequence { get; set; }
}

Проблема в том, что NHibernate (используя Fluent NH) пытается отобразить его, используя первичный (составной) ключ, определенный в таблице MemberCv. Да, я знаю, что NHibernate ненавидит первичные ключи. Нет, я не могу ввести искусственный ключ и превратить существующий в уникальное ограничение.

На карте переопределения MemberCv мы попытались:

map.Join("PhotoStatus", join
  .KeyColumn("FileName")
  .References(cv => cv.PictureFileName)
  .UniqueKey("UK_PictureRef");

, что приводит к:

NHibernate.

Мы даже пытались использовать вычисляемые столбцы в таблице PhotoStatus (имя файла основано на MemberId и PublicationCode, поэтому можно вычислять элементы связанного составного ключа), а затем использовать неявное соединение, что приводит к:

NHibernate.

Есть идеи? Это один из тех сценариев, когда должен быть довольно простым, но мы просто не можем найти подходящую конфигурацию для него ...

...