【问题标题】:Entity Framework 4 - Calling a Select / Paging Stored Procedure实体框架 4 - 调用选择/分页存储过程
【发布时间】:2016-12-24 17:57:06
【问题描述】:

我刚开始使用 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);

通过这种方式调用 select 的方式与其他操作相同,我最终不会在实体容器的根目录中使用许多可能无法管理的函数。

这是一个较小的问题,因为至少目前一切正常。

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

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

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

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

【问题讨论】:

    标签: stored-procedures asp.net-mvc-2 paging entity-framework-4


    【解决方案1】:

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

    你会/不应该这样做,但我觉得有必要(因为没有什么是不可能的)说你可以为你的程序编写一个自定义的 LINQ 实现,但是要干净地包装几个程序将是一大堆工作.

    一些建议:

    • 您可以只使用 linq 并跳过存储过程
    • 如果您继续使用 EF 通过函数包装存储过程,则可以通过将模型分解为多个上下文来缓解多函数问题
    • 您可以使用 EF 上下文的连接属性直接调用存储过程,并有一个只读(非 EF 附加)视图模型类用于显示目的。 id(或其他主键)字段仍然是让您进入详细屏幕或 json 回调以获取真实 EF 对象的可编辑版本的正确值

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      相关资源
      最近更新 更多