У меня есть эти таблицы в моей базе данных 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.
Есть идеи? Это один из тех сценариев, когда должен быть довольно простым, но мы просто не можем найти подходящую конфигурацию для него ...