NHibernate에 새로운 것으로 간주됩니다. 제 기사 엔티티 클래스에 두 개의 지연 속성이 있어야합니다. 그 중 하나는 사용자 기타 콘텐츠입니다. 내가 뭔가 잘 작동NHibernate Linq 게으른 문자열 속성을 가져 오는 eager 호출
using(ISession session = sessionFactory.OpenSession()) {
return session.Query<Article>()
.SingleOrDefault(a => a.Id == id);
}
처럼 선택
<class name="Article" table="TBL_ARTICLE">
<id name="Id" column="ART_ID">
<generator class="native" />
</id>
<property name="UserId" column="USR_ID" not-null="true" />
<many-to-one name="User" column="USR_ID" insert="false" update="false" />
<property name="Content" column="ART_CONTENT" not-null="true" lazy="true" />
</class>
public class Article
{
public virtual long Id { get; set; }
public virtual long UserId { get; set; }
public virtual User User { get; set; }
public virtual string Content { get; set; }
}
처럼 내 기업 및 매핑이다. using 블록 밖에서 User 또는 Content 속성에 액세스하려고하면 일종의 지연로드 예외가 발생합니다. 이것이 내가 예상 한 것입니다.
사용자 데이터를 간절히 가져 오는 경우가 있습니다. 나는 이것을 다음과 같이 선택한다 :
using(ISession session = sessionFactory.OpenSession()) {
return session.Query<Article>()
.Fetch(a => a.User)
.SingleOrDefault(a => a.Id == id);
}
여전히 잘 동작한다. 사용중인 블록 외부에서 User 속성에 액세스하려고하면 해당 속성 값을 가질 수 있지만 Content 속성에 액세스하려고 할 때 일종의 지연로드 예외가 발생하며 예상 한 결과가 발생합니다.
내가
using(ISession session = sessionFactory.OpenSession()) {
return session.Query<Article>()
.Fetch(a => a.Content)
.SingleOrDefault(a => a.Id == id);
}
같은 콘텐츠 데이터를 가져 오기 할 때 나는 예외를 얻을 : 나는 HQL에 의해이 일에 대한 몇 가지 블로그 게시물을 읽을 수는 있지만 내가 Linq에를 사용하여 솔루션을 찾고 있어요
Invalid join: a.Content
[.SingleOrDefault[Repository.NH.Article](.Fetch[Repository.NH.Article,System.String]
(NHibernate.Linq.NhQueryable`1[Repository.NH.Article], Quote((a,) => (a.Content)),),
Quote((a,) => (Equal(a.Id, 1))),)]
공급자.
I 콘텐츠 데이터를 열망 가져올 수있는 샤스이 있습니까? EF와 같은 메소드를 포함 할 수 있습니다. 그렇지 않다면, linq 공급자를 사용하여 게으른 스칼라 속성을 가져올 수 없다고 말할 수 있습니까? –
@ MehmetAtaş 내가 아는 바는 아니지만 - 분명히 당신이 사용하는 문장 내에서 Content 속성에 접근하면 그것은로드 될 것입니다.하지만 초기 쿼리의 일부로 채워지지 않으므로 늦게로드됩니다. 왜이 특정 자산을 늦게로드하고 싶습니까? MehmetAtaş EF @ – CSL
메소드의 기능을 포함하는 기사의 내용은 그 nHibernate 수 – CSL