使用实体框架进行延迟加载

时间:2016-01-13 00:31:19

标签: c# entity-framework

我的代码中有一个Cars对象的集合。

My Domain Layer类包含以下内容:

    // Entity Framework backing field
    private ReadOnlyCollection<Car> _cars;

    public virtual ReadOnlyCollection<Car> Cars
    {
        get
        {
            AuditMethod(_cars);
            return _cars;
        }
        private set { _cars = value; }
    }

请注意,该属性标记为虚拟以允许延迟加载。在我的Web Layer中,我在Web Api中使用它,如果我想从我的特定车库返回所有的汽车,我可以这样做:

var cars = Garage.Cars;

一切都按预期工作,它们加载得很好。然而,由于在访问这样的属性时运行的AuditMethod,当特定车库中的汽车数量变高时,性能实际上正在下降。由于我只是在这个公开的Web API方法中返回数据而不担心触发审计信息,我的想法是在Domain层中编写一个方法,它只返回私有字段,如下所示:

    public ReadOnlyCollection<Car> GetCarsForWebApi()
    {
        return _cars;
    }

然后在Web API中,我尝试做类似的事情:

var cars = Garage.GetCarsForWebApi();

然而,当我突破这一行时,我总是没有数据返回。我假设这是因为此时数据不是延迟加载的。是否有一些我缺少的东西让这个工作?我也不想在我的域层中引用我的DAL层,所以我想避免使用.Include来编译db.Context,以便尽可能地加载数据?

0 个答案:

没有答案
相关问题