我刚开始接触Entity Framework4.0和ASP.NET MVC2,对于存储过程和分页的使用有几个问题。
您可以将Insert、Update和Delete操作映射到存储过程,我已经这样做了。但是,为了让分页起作用,我需要映射Select操作。
现在是我能做到这一点的唯一/最好的方法,在我的模型浏览器中,右键单击存储过程,"Add Function Import“并添加它。
这将导致以下代码...
var contactFormSubmissions = _entities.ContactFormSubmission_GetContactFormSubmissions(1, 10);我的问题是,它会在根级别将其添加到全局实体容器中,而不是像插入/更新和删除操作那样添加到ContactFormSubmission实体。
我宁愿这样做,但通过一个存储过程...
_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的实体框架分页的例子都会很棒!
发布于 2011-07-12 05:36:43
LINQ开箱即用不会包装存储过程。实体框架函数是通过EF调用存储过程并返回实体的唯一方法。这是可以理解的,因为EF也知道什么参数来映射您的分页变量。
你会/永远不会这样做,但我觉得有必要(因为没有什么是不可能的),你可以为你的过程编写一个自定义的LINQ实现,但要干净地包装几个过程,那将是一项繁重的工作。
一些建议:
的可编辑版本
这些都不是十全十美的,但有很多方法可以解决这个问题。
https://stackoverflow.com/questions/2781927
复制相似问题