asp.net-mvc – 我们应该使用Entity Framework Code First方法在
我现在已经使用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). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 检测ASP.NET网站的出站连接排队
- ASP.NET MVC和HTML5
- asp.net – 如何处理Null(GridView Container.DataItem)
- asp.net – 检查ValidationGroup是否从代码隐藏有效
- asp.net-mvc – ASP.Net MVC 5带范围的Google身份验证
- asp.net – Web.config Transforms在没有的情况下添加额外的
- asp.net – 跨安全和非安全共享身份验证
- asp.net-mvc-3 – 自定义ActionInvoker与MVC 3中ActionFilt
- asp.net-mvc – 传递的JSON集合未被控制器拾取
- asp.net – 是否有可能欺骗或重用VIEWSTATE或检测它是否受到
- asp.net-mvc – 如果有的话,设计模式在实现基于用
- 为什么Asp.Net MVC 5在_Layout.cshtml的底部放置
- asp.net-mvc – 您是否使用任何自定义ASP.NET MV
- ASP.NET网站中使用Ninject 3进行依赖注入
- asp.net-mvc-3 – 增加ASP.NET MVC 3中的超时值
- ASP.Net Cache是??否在不同的用户会话之间共享?
- asp.net – 我可以在Orchard CMS中使用我的Ninje
- 在加载asp.net页面时显示gif
- asp.net – 从源代码管理中排除app.config?
- ASP.NET 中 .aspx 与.cs文件的关系