NHibernate: почему мой запрос профилировщика не соответствует моему беглому отображению? - PullRequest
1 голос
/ 06 января 2010

У меня есть это беглое отображение:

sealed class WorkPostClassMap : ClassMap<WorkPost>
{
    public WorkPostClassMap()
    {
        Not.LazyLoad();

        Id(post => post.Id).GeneratedBy.Identity().UnsavedValue(0);
        Map(post => post.WorkDone);
        References(post => post.Item).Column("workItemId").Not.Nullable();
        References(Reveal.Property<WorkPost, WorkPostSheet>("Owner"), "sheetId").Not.Nullable();
    }

родительский класс:

sealed class WorkPostSheetClassMap : ClassMap<WorkPostSheet>
{
    public WorkPostSheetClassMap()
    {
        Id(sheet => sheet.Id).GeneratedBy.Identity().UnsavedValue(0);
        Component(sheet => sheet.Period, period =>
                                             {
                                                 period.Map(p => p.From, "PeriodFrom");
                                                 period.Map(p => p.To, "PeriodTo");
                                             });
        References(sheet => sheet.Owner, "userId").Not.Nullable();
        HasMany(sheet => sheet.WorkPosts).KeyColumn("sheetId").AsList();
    }

Класс WorkItem:

sealed class WorkItemClassMap : ClassMap<WorkItem>
{
    public WorkItemClassMap()
    {
        Not.LazyLoad();

        Id(wi => wi.Id).GeneratedBy.Assigned();
        Map(wi => wi.Description).Length(500);
        Version(wi => wi.LastChanged).UnsavedValue(new DateTime().ToString());
    }
}

И когда коллекция WorkPosts загружается с ленивым рабочим пост-листом, я получаю следующий оператор выбора:

SELECT  workposts0_.sheetId as sheetId2_, 
        workposts0_.Id as Id2_, 
        workposts0_.idx as idx2_, 
        workposts0_.Id as Id2_1_, 
        workposts0_.WorkDone as WorkDone2_1_, 
        workposts0_.workItemId as workItemId2_1_, 
        workposts0_.sheetId as sheetId2_1_, 
        workitem1_.Id as Id1_0_, 
        workitem1_.LastChanged as LastChan2_1_0_, 
        workitem1_.Description as Descript3_1_0_ 

FROM    "WorkPost" workposts0_ 
        inner join "WorkItem" workitem1_ on workposts0_.workItemId=workitem1_.Id 

WHERE   workposts0_.sheetId=@p0;@p0 = 1

Нет, здесь есть пара вещей, которые не имеют смысла для меня:

  1. Свойство рабочей позиции "Id" встречается дважды в операторе выбора
  2. Существует выборочная ссылка на столбец с именем "idx", но этот столбец не является частью какого-либо свободного отображения.

Кто-нибудь, кто может помочь пролить свет на это?

1 Ответ

1 голос
/ 06 января 2010

Столбец idx находится в списке выбора, поскольку вы сопоставили Sheet.WorkPosts как упорядоченный список. Столбец idx необходим для установки порядка элементов в списке. Я не уверен, почему свойство id дважды указывается в операторе select.

Кстати, несохраненное значение 0 является значением по умолчанию для полей идентификаторов, поэтому вы можете удалить .UnsavedValue(0), если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...