首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架4-调用选择/分页存储过程

问实体框架4-调用选择/分页存储过程
EN

Stack Overflow用户
提问于 2010-05-06 22:40:49
回答 1查看 2.3K关注 0票数 2

我刚开始接触Entity Framework4.0和ASP.NET MVC2,对于存储过程和分页的使用有几个问题。

您可以将Insert、Update和Delete操作映射到存储过程,我已经这样做了。但是,为了让分页起作用,我需要映射Select操作。

现在是我能做到这一点的唯一/最好的方法,在我的模型浏览器中,右键单击存储过程,"Add Function Import“并添加它。

这将导致以下代码...

代码语言:javascript
复制
var contactFormSubmissions = _entities.ContactFormSubmission_GetContactFormSubmissions(1, 10);

我的问题是,它会在根级别将其添加到全局实体容器中,而不是像插入/更新和删除操作那样添加到ContactFormSubmission实体。

我宁愿这样做,但通过一个存储过程...

代码语言:javascript
复制
_entities.ContactFormSubmissions.Select<ContactFormSubmission>(string.Empty, pageParam, pageSizeParam);

这样,select的调用方式与其他操作的调用方式相同,并且我不会在实体容器的根目录中使用许多函数,这可能会变得不可管理。

这是一个较小的问题,因为至少它目前都在工作。

我的下一个问题是如何使用这个函数最好地实现分页。

我所见过的关于如何使用MVC和实体框架实现分页的所有示例都使用了LINQ和IQueryable。有没有一种方法可以将IQueryable与延迟加载和LINQ函数Skip / Take与基于表的函数/sproc一起使用?

http://blog.wekeroad.com/2007/12/10/aspnet-mvc-pagedlistt/

PS -任何在MVC中使用SP的实体框架分页的例子都会很棒!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-12 05:36:43

LINQ开箱即用不会包装存储过程。实体框架函数是通过EF调用存储过程并返回实体的唯一方法。这是可以理解的,因为EF也知道什么参数来映射您的分页变量。

你会/永远不会这样做,但我觉得有必要(因为没有什么是不可能的),你可以为你的过程编写一个自定义的LINQ实现,但要干净地包装几个过程,那将是一项繁重的工作。

一些建议:

  • 你可以只使用linq并跳过存储过程
  • 如果你继续使用EF通过一个函数包装一个存储过程,你可以通过将你的模型分解成几个上下文来缓解多函数问题
  • 你可以使用EF上下文的连接属性来直接调用存储过程,并且有一个只读的(非EF附加的) viewmodel类用于显示目的。id (或其他主键)字段仍然是正确的值,可以将您带到详细屏幕或json回调,以获取实际EF object

的可编辑版本

这些都不是十全十美的,但有很多方法可以解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2781927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档