Fluent Nhibernate:渴望加载私人收藏
本文关键字:加载 私人收藏 渴望 Nhibernate Fluent | 更新日期: 2023-09-27 18:22:23
我查看了堆栈溢出的情况,但在任何地方都找不到答案。
假设我有一个班的人
class Man
{
protected virtual ICollection<Cat> Cats {get; set;}
}
class ManMapping : ClassMap<Man>
{
HasMany(Reveal.Member<Man, IEnumerable<Cat>>("Cats"))
.KeyColumn("ManId")
.Cascade.All();
}
我知道,如果它是一个公共属性,我可以使用.fetch()来急切地加载它,但当集合设置为受保护时,我找不到急切地加载集合的方法。
我还应该提到,我希望在逐个案例的基础上,而不是在映射中,急切地加载代码。
谢谢。
我只是简单地测试了一下,还不能确认它100%有效,但你应该能够使用反射来获取属性,并创建一个表达式来加载属性。
首先,通过反射获得属性:
var catsProperty = typeof(Man).GetProperty("Cats", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
然后,创建一个指向Man的表达式参数,以及一个获取属性的表达式:
var expressionArgument = Expression.Parameter(typeof(Man), "m");
var propertyGetter =
Expression.Lambda<Func<Man, IEnumerable<Cat>>>(
Expression.Property(expressionArgument, catsProperty),
expressionArgument);
然后在linq查询中使用它:
var man =
session.Query<Man>()
.Fetch(propertyGetter)
.First();