После небольшого изменения модели данных некоторые запросы начали давать мне это исключение.Однако даже после прочтения различных веток форума и блогов я не понимаю, почему это происходит в моем случае.Поэтому я надеюсь, что кто-то здесь может помочь.Во-первых, пример запроса:
var criteria = Session.CreateCriteria(typeof(SomeEntity));
criteria.Add(Expression.IdEq(id));
criteria.SetFetchMode("_PrivateProperty", FetchMode.Eager);
criteria.CreateAlias("PublicProperty", "alias");
criteria.Add(Expression.Eq("alias.Id", aliasId));
Если я изменю запрос, удалив (1) SetFetchMode или (2) CreateAlias для открытого свойства, все работает нормально.
Закрытое свойствообычно загружается лениво, но в этом случае я хочу загрузить его вместе с его родительским объектом для борьбы с выбором N + 1.
Итак, почему он не работает так, как показано выше, и работает, когда яудалить определенные части запроса?
ОБНОВЛЕНИЕ
Сгенерированный SQL:
SELECT * FROM SomeEntity this_
inner join PublicProperty alias4_ on this_.SomeEntityId=alias4_.SomeEntityId
inner join ReferencedProperty rp2_ on alias4_.RPId=rp2_.RPId
left outer join PrivateProperty v1_ on this_.SomeEntityId=v1_.SomeEntityId
WHERE this_.SomeEntityId= @p0 and rp2_.RPId= @p1
При запуске в SQL Server Management Studio он работает должным образом,Я получаю два результата.Между модификацией модели данных и запроса данные в базе данных не изменились.
UPDATE2
Изменение в модели.Оригинальное отображение:
References(d => d.PublicProperty, "PublicPropertyId").Cascade.SaveUpdate();
Новое отображение:
HasManyToMany(d => d.PublicPropertys)
.Access.CamelCaseField(Prefix.Underscore)
.Table("SomeEntityPublicProperty")
.ParentKeyColumn("SomeEntityId")
.ChildKeyColumn("PublicPropertyId")
.Cascade.SaveUpdate()
.Inverse();
ОБНОВЛЕНИЕ3
HasMany<PrivatePropertyEntity>(Reveal.Member<SomeEntity>("_PrivateProperty"))
.Table("SomeEntity_PrivateProperty")
.KeyColumn("SomeEntityId")
.Cascade.AllDeleteOrphan()
.LazyLoad().Inverse();