Свободное сопоставление одного столбца NHibernate с составным ключом

У меня есть ситуация, когда я определил объект в своей модели домена, в котором я хотел бы открыть один столбец идентификатора.

public class OfferedProduct  
{  
    public virtual string Id {get; set;}  

    //other properties
}

Устаревшая таблица базы данных, с которой это будет отображаться,

CREATE TABLE ProductGrouping  
MemberNumber INT NOT NULL,
GroupId CHAR NOT NULL,
...

Я не хочу ставить под угрозу модель предметной области, вводя два свойства и сопоставляя их с помощью конструкции "CompositeId".

CompositeId().KeyProperty(x => x.MemberNumber).KeyProperty(x => x.GroupId)

В идеале я хочу объединить два значения в форме {MemberNumber}{GroupId} и представить это как значение идентификатора. Затем я бы использовал пользовательский тип, чтобы обрабатывать, как эти значения объединяются при извлечении из БД и разбиваются при сохранении/выборе.

Я заметил, что метод "CompositeId" не допускает customType, как при стандартном вызове "Id"; но метод «Id» не дает возможности установить несколько столбцов. Я видел примеры, когда люди использовали «Карту» для объединения двух столбцов с использованием пользовательского типа, но не для значений идентификаторов.

Я заметил, что «CompositeId» имеет перегрузку, которая может принимать настраиваемый класс идентификации, но я не знаю, как его использовать в этом сценарии.

 CompositeId<OfferedProductIdentifier>(x => x.?)

Любая помощь будет принята с благодарностью.


person watsite    schedule 26.08.2010    source источник


Ответы (1)


на случай, если кто-то придет сюда

CompositeId()
    .KeyProperty(t => t.Id, c =>
        c.Type(typeof(MyUserType)).ColumnName("MemberNumber").ColumnName("GroupId"));
person Firo    schedule 29.08.2011