gpt4 book ai didi

c# - NHibernate Linq Provider 渴望获取惰性字符串属性

转载 作者:行者123 更新时间:2023-11-30 17:53:46 27 4
gpt4 key购买 nike

我被认为是 NHibernate 的新手。我希望我的 Article 实体类具有两个惰性属性。其中之一是用户,另一个是内容。我的实体和映射就像

<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(ISession session = sessionFactory.OpenSession()) {
return session.Query<Article>()
.SingleOrDefault(a => a.Id == id);
}

它工作正常。当我尝试访问 using block 之外的 User 或 Content 属性时,我遇到了某种延迟加载异常。这是我所期望的。

在某些情况下,我喜欢急切地获取用户数据。我这样选择它:

using(ISession session = sessionFactory.OpenSession()) {
return session.Query<Article>()
.Fetch(a => a.User)
.SingleOrDefault(a => a.Id == id);
}

它仍然可以正常工作。当我尝试访问 using block 之外的 User 属性时,我可以获得其属性值,但是当尝试访问 Content 属性时,我仍然遇到某种延迟加载异常,这仍然是我所期望的。

当我想像这样获取内容数据时

using(ISession session = sessionFactory.OpenSession()) {
return session.Query<Article>()
.Fetch(a => a.Content)
.SingleOrDefault(a => a.Id == id);
}

我得到一个异常(exception):

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))), )]

我阅读了一些关于通过 HQL 执行此操作的博客文章,但我正在寻找使用 Linq Provider 的解决方案。

最佳答案

Fetch 构造仅适用于映射对象之间关系的属性,因此使用“引用”、“多对一”或“多对多”映射的属性。

这就是为什么它可以按预期使用 User 属性而不是字符串 Content 属性。

经过进一步调查,我认为您无法使用 LINQ 语法实现您想要的结果,但应该可以使用等效的 HQL 语句使用 fetch all properties 提示:

session.CreateQuery("from Article fetch all properties")

关于c# - NHibernate Linq Provider 渴望获取惰性字符串属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16919670/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com