我有一个看起来像这样的类模型:
public class TheSystem
{
public virtual Guid Id { get; protected set; }
public virtual ICollection<User> Users { get; protected set; }
}
public class User
{
public virtual Guid Id { get; protected set; }
public virtual string Username { get; set; }
...
}
映射
public class TheSystemMap : ClassMap<TheSystem>
{
public TheSystemMap()
{
Id(x => x.Id).GeneratedBy.GuidComb();
HasMany(x => x.Users).Cascade.AllDeleteOrphan().ExtraLazyLoad().Cache.ReadWrite().IncludeNonLazy();
Cache.ReadOnly();
}
}
public class UserMap : ClassMap<User>
{
public UserMap()
{
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x => x.Username).Not.Nullable();
...
Cache.ReadOnly();
}
}
当我想向系统添加新用户时,问题就来了。因为我引用了Users
集合,NHibernate 加载所有实例(我不想要,因为我只想插入单个用户)。
...
theSystem.Users.Add(new User("aUser"));
...
当我尝试获取项目的计数时,该ExtraLazyLoad()
选项按预期工作(接下来生成的代码仅查询计数)
...
var count = theSystem.Users.Count;
...
我也尝试添加.AsBag()
具有相同结果的选项。
我在映射中遗漏了一些东西,或者是一种无法通过常规方式解决的情况?