我刚刚开始使用Entity Framework 4.0和ASP.NET MVC 2,并且对存储过程和分页的使用有一些疑问。
您可以将插入,更新和删除操作映射到存储过程,我已经完成了此操作。但是,为了使我的分页工作,我需要映射Select操作。
现在是我可以通过访问我的模型浏览器,右键单击存储过程和“添加函数导入”并添加它来实现此目的的唯一/最佳方式。
这导致以下代码....
var contactFormSubmissions = _entities.ContactFormSubmission_GetContactFormSubmissions(1, 10);
我的问题是它将它添加到根级别的全局实体容器而不是ContactFormSubmission实体,如插入/更新和删除操作。
我宁愿这样,但是通过存储过程......
_entities.ContactFormSubmissions.Select<ContactFormSubmission>(string.Empty, pageParam, pageSizeParam);
这样选择的方式与其他操作的调用方式相同,并且我最终在实体容器的根目录中没有很多函数,这些函数可能无法管理。
这是一个较小的问题,因为至少它目前都在工作。
我的下一个问题是如何使用此功能最好地实现分页。
我见过的关于如何使用MVC和实体框架完成分页的所有示例都使用了LINQ和IQueryable。有没有办法使用IQueryable与延迟加载和LINQ函数Skip / Take与基于表的函数/ sproc?
http://blog.wekeroad.com/2007/12/10/aspnet-mvc-pagedlistt/
PS - 使用SP的实体框架在MVC中进行分页的任何示例都会很棒!
答案 0 :(得分:1)
开箱即用的LINQ不会包装存储过程。实体框架功能是通过EF调用存储过程并返回实体的唯一方法。这是可以理解的,因为EF已经知道知道什么参数来映射您的分页变量。
你会/不应该这样做,但我觉得有必要(因为没有什么是不可能的)说你可以为你的程序编写一个LINQ的自定义实现,但这将是一个干净地包装几个程序的工作。
一些建议:
这些都不是完美的,但有很多方法可以解决这个问题。