2011-02-02 1 views
0

Я пытаюсь отобразить следующую структуру:Не знаю, как сделать свойство на объект с помощью Fluent NHibernate из пользовательского запроса

public class Tag { 
    public Guid Id {get;set;} 
    public DateTime ActivatedDate {get;set;} 
} 

public class History { 
    public Guid Id {get;set;} 
    public TypeEnum Type {get;set;} 
    public Guid ContentID {get;set;} 
    public DateTime HistoryDate {get;set;} 
} 

Tag.ActivatedDate фактически населен (select top 1 HistoryDate from History where ContentID = {tagid} && Type = 'Activated' order by HistoryDate desc

Я действительно не уверен, как это сделать с помощью Fluent NHibernate.

Мои отображения являются:

public TagMapping() { 
    Table("Tags"); 
    Id(x => x.Id)  
} 

public HistoryMapping() { 
    Table("History"); 
    Id(x => x.Id); 
    Map(x => x.Type).CustomeType<TypeEnum>(); 
    Map(x => x.ContentID); 
    Map(x => x.HistoryDate); 
} 

Я не уверен, как отобразить Tag.ActivatedTop

В основном ищут:

SELECT tag.Id, 
     (select top 1 HistoryDate from History 
       where ContentID = tag.Id 
       AND Status = 'Activated' 
     order by HistoryDate desc) As ActivatedDate 
FROM Tags tag 
+0

Возможно, вы имели в виду ActivatedDate в "I'm n не уверены, как сопоставить Tag.ActivatedTop "? – brainimus

ответ

0

в конечном итоге делает:

Map(x => x.ActivatedDate) 
       .ReadOnly() 
       .Formula(
        string.Format(
         "(select top 1 h.HistoryDate from History h where h.ContentID = Id AND h.Status = 'Activated' order by h.HistoryDate desc)")); 
+0

После этого я решил немного изменить нормализацию и добавить столбец ActivatedDate в таблицу тегов. – Rob