使用存储库模式

时间:2015-09-24 21:21:37

标签: c# asp.net-mvc entity-framework asp.net-web-api repository-pattern

默认情况下,在我的DbContext中禁用了LazyLoading。我使用存储库模式,在某些情况下,我只需要获得简单的对象,而在其他情况下,我需要获取具有导航属性值的对象。

如何为LazyLoading实现类似开关的功能?
任何帮助将不胜感激

我有一个有效的解决方案,但我不确定它是否正确: 在存储库的界面中我添加了新属性

    public interface IRepository<T> where T : BaseEntity
    {
        T GetById(object id);
        void Insert(T entity);
        .....
        bool LazyLoadingSwitches { set; }
    }

然后实施了它:

public bool LazyLoadingSwitches 
{
    set
    {
        this.context.Configuration.LazyLoadingEnabled = value;
    } 
}

当我需要获取相关数据的模型时,我在控制器中使用:

repository.LazyLoadingSwitches = true;
name = order.Customer.FullName; 
repository.LazyLoadingSwitches = false;

请建议我最好的解决方案是什么?

2 个答案:

答案 0 :(得分:1)

只是我的两分钱:

我认为在this.context.Configuration.LazyLoadingEnabled = value;调用周围实现包装是可以的。我会把它作为一种方法实现,但是只写属性很奇怪。

在我的编码中,我让执行查询的代码决定是否要使用延迟加载或.Include语句。最重要的是,将使用返回的类的代码会查找所需的所有数据。

答案 1 :(得分:1)

我认为你可以使用include:

order.Include("Customer");
var name = order.Customer.FullName;

使用lambda表达式的示例:

order.Include(o => o.Customer);
var name = order.Customer.FullName;