c# - 流利的 NHibernate + 禁用 LazyLoad

标签 c# nhibernate fluent-nhibernate lazy-loading

嘿,我试过在我的收藏中禁用 LazyLoad,但没有成功......到目前为止我试过的代码是:

//Person.cs

public class Person
{
    public virtual int Id { get; private set; }
    public virtual string FirstName { get; set; }
    public virtual IList<Car> Cars { get; set; }

    public Person()
    {
        Cars = new List<Car>();
    }

    public virtual void AddCar(Car car)
    {
        Cars.Add(car);
    }
}

public class PersonMap : ClassMap<Person>
{
    public PersonMap()
    {
        Id(x => x.Id);
        Map(x => x.FirstName);
        HasMany(x => x.Cars).KeyColumn("PersonId").Cascade.AllDeleteOrphan().Not.LazyLoad();
        Table("Persons");
    }
}

//汽车.cs

public class Car
{
    public virtual int Id { get; set; }
    public virtual string CarName { get; set; }
    public virtual Person Person { get; set; }
}

public class CarMap : ClassMap<Car>
{
    public CarMap()
    {
        Id(x => x.Id);
        Map(x => x.CarName);
        HasOne(x => x.Person).Not.LazyLoad();
        Table("Cars");
    }
}

有什么建议吗?

提前致谢!

最佳答案

延迟加载意味着仅当您访问 cars 属性时才会加载 cars 集合。因此,当您关闭此功能时,加载一个人时,您将始终加载他的所有汽车。要查看这是否对您“有效”,您可以打开 SQL 事件探查器(或获取 NHibernate profiler 的试用版),然后调试您的代码。当您单步执行代码时,您可以看到汽车集合是立即加载,还是仅在您首次访问时加载。

简而言之,我认为你没有做错什么,只是误解了概念。

关于c# - 流利的 NHibernate + 禁用 LazyLoad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4752751/

相关文章:

c# - NHibernate:读取 mysql Blob 字段 - 值返回为 "System.Byte[]"

.net - NHibernate Postgresql 日期时间到时间转换

c# - Fluent NHibernate 中的自动映射子类

c# - 用于在文本文件中搜索确切字符串并在找到失败时执行操作的代码

c# - ria 服务服务器端数据结构 : is it shared between threads

c# - 正则表达式如何匹配字符串末尾的下划线?

nhibernate - 如何在NHibernate单元测试中管理 session ?

c# - Fluent nHibernate - 如何选择没有时间的 DISTINCT 日期?

nhibernate - 防止 Fluent NHibernate 选择 n+1

c# - 如何使用 Entity Framework SqlQuery 保护 SQL 参数?