【问题标题】:Entity Framework model or viewmodel for listing data?用于列出数据的实体框架模型或视图模型?
【发布时间】:2016-02-19 06:44:10
【问题描述】:

想象一下,我有一个包含 20 个字段的模型,我现在有 1000 条记录但我的数据库每天都在增长,然后我想在剃须刀页面中列出它们并显示所有这些但只需要 5 个字段。

我只想知道是否可以将包含所有字段的模型返回到我的视图并在我的视图中选择我需要的字段,或者我应该使用我只需要的字段创建一个 viewModel?我担心性能。

【问题讨论】:

  • 当担心性能时,测量。

标签: c# asp.net-mvc entity-framework razor


【解决方案1】:

一定要创建一个视图模型来仅公开您需要的字段。出于性能和可能的安全原因,请勿公开任何您不需要的字段。

【讨论】:

    【解决方案2】:

    对于这样的小数字,这真的没关系。性能方面,您不会看到太大的差异。我也不会担心安全问题。

    我要担心的是代码的组织。你想把你的视图耦合到你的数据库模型吗?如果你没问题,那就去吧!

    编辑: 我仍然认为是否返回模型的决定不应基于潜在的性能影响,而应取决于您的代码组织。

    当您谈论显示更大的记录集时,您需要一种显示它们的方法(即带有分页的网格......),我建议您考虑一直保留 IQueryable。有些产品可以采用 IQueryable 并为您的数据提供分页、排序和搜索。

    Grid.Mvc Telerik

    【讨论】:

    • 你知道,我的数据库每天都在增长,那么未来呢?我经历过,如果我想为选择记录设置一些条件,我必须只选择我需要的字段,但是不带任何条件选择所有记录怎么样?想象一下明年我将有 1,000,000 条记录。您对数据库模型的几个视图是什么意思?
    • 一百万条记录在你说一千的问题中可能值得一提。 stevefenton.co.uk/2013/03/…
    • 如果您有一百万条记录,那么包含所有列的事实不会影响您的性能。这将是一百万条记录。然后你需要开始考虑分页/加载。不过,我会删除您问题的 1,000 部分。
    【解决方案3】:

    使用 viewModel,您可以通过仅传递页面上所需的字段来封装您的属性。当您使用大量字段时,是的,使用 ViewModel 可能会提高性能。并且通过使用 ViewModal,您可以保持应用程序的整洁并分离所有逻辑。 :)

    【讨论】:

      【解决方案4】:

      当然,您可以在服务器端或客户端过滤您的数据。但最好的方法是在服务器端过滤数据,以尽可能减少服务器负载和网络流量。它还使您的应用程序更具响应性并具有更好的性能。使用 IQueryable 接口进行服务器端过滤(查看here 了解更多信息)。

      使用服务器端过滤的一个副作用是具有更好的安全性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多