加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 我们应该使用Entity Framework Code First方法在

发布时间:2020-12-16 09:24:25 所属栏目:asp.Net 来源:网络整理
导读:我现在已经使用Entity Framework Code First方法开发了许多应用程序.在所有我使用Data Repository模式.此Data Repository模式一次查询单个实体.例如, 我有2个型号 员工和部门 因此,为了获取所有员工和部门,我将创建2个数据存储库实例.例如 var empRepository
我现在已经使用Entity Framework Code First方法开发了许多应用程序.在所有我使用Data Repository模式.此Data Repository模式一次查询单个实体.例如,

我有2个型号
员工和部门

因此,为了获取所有员工和部门,我将创建2个数据存储库实例.例如

var empRepository = new DataRepository<Employee>();
var allEmployees = empRepository.GetAll();

var depRepository = new DataRepository<Department>();
var alldepartment = depRepository.GetAll();

现在,这种模式在大多数情况下都很有效.现在,当我想要执行连接时,我无法在此模式中执行此操作.我只有在获取了两个实体的所有记录之后才能执行连接,然后我可以在内存数据上使用连接.这会在我的逻辑中产生2个查询的额外开销.是否有任何人具有可与DataRepository模式一起使用的良好模式或解决方案.请建议任何替代此模式.

解决方法

实际上我昨天刚刚在我的通用存储库中实现了一个Join函数.这比每个人的实现方式要容易得多,并且您可以在这样做的同时使用Entity Framework的一些很酷的功能.

首先,我使用的是类似于我在this blog post中编写的存储库.您会注意到许多方法正在返回IQueryable.这不是偶然的. IQueryable将允许仍然使用延迟执行,这意味着查询将不会在数据库上运行,直到某些东西强制它(即循环或.ToList()调用).你会看到,将Join加入这种类型的存储库,你不会最终需要将所有实体加载到内存中来进行连接,因为你所暴露的只是一个IQueryable.

话虽这么说,这就是我在Join方法的可查询版本的基础上加入我的存储库的方法:

public IQueryable<TResult> Join<TInner,TKey,TResult>(IRepository<TInner> innerRepository,Expression<Func<T,TKey>> outerSelector,Expression<Func<TInner,TKey>> innerSelector,TInner,TResult>> resultSelector) where TInner : class
{
  return DbSet.Join(innerRepository.All(),outerSelector,innerSelector,resultSelector);
}

然后,这只对数据库进行一次查询以获取您正在请求的所有信息(同样,因为它只传递All()方法中的IQueryable).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读