【问题标题】:MVC5 EF6 Read data from a database table without using modelMVC5 EF6 从数据库表中读取数据而不使用模型
【发布时间】:2015-10-14 19:58:18
【问题描述】:

我是 MVC5 和实体框架的新手。 场景是这样的

  1. 我必须从已经存在的数据库中读取数据
  2. 只有 SELECT 语句用于获取数据。
  3. 这在视图中显示为表格/报告

我不需要模型,因为数据库已经设计并填充了数据。我只需要使用 SELECT 语句来查询和显示数据。 模型需要 KEY,而我的场景中不需要。

我可以创建 DBContext 并使用控制器中的上下文来读取数据以在视图中列出和显示

任何帮助将不胜感激

【问题讨论】:

  • 我建议您多了解一下 EF 的工作原理。您不必使用 ID 进行查询。您可以使用 LINQ 执行任何类型的查找。
  • 你为什么要以这种方式使用EF 似乎你也可以使用其他任何东西
  • 重点在于有一个模型。如果您认为不需要模型,则不需要 EF(它是一个 O/R 映射器),只需使用 ADO.NET(不推荐)
  • 我已经使用 MVC5 在 EF6 中构建了一个应用程序,并且只想显示来自外部数据库的一些数据。所以我不需要模型,只需要一个带有数据上下文的控制器。所以我只想知道这是否可能。我基本上是一名 PHP 开发人员。在 cakephp 中,这可以通过在模型中以数组形式提供数据源并通过覆盖模型分页函数来编写自定义 SQL 查询来实现。所以再次让我重新表述这个问题。是否可以在没有模型的情况下编写控制器并使用它在MVC5中使用dbcontext查询数据库

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


【解决方案1】:

MVC 代表(模型视图控制器)与数据的关注点分离。

型号:

MVC 模型包含视图或控制器中未包含的所有应用程序逻辑。该模型应包含您的所有应用程序业务逻辑、验证逻辑和数据库访问逻辑。例如,如果您使用 Microsoft Entity Framework 访问您的数据库,那么您将在 Models 文件夹中创建您的 Entity Framework 类(您的 .edmx 文件)。

视图应该只包含与生成用户界面相关的逻辑。控制器应该只包含返回正确视图或将用户重定向到另一个操作(流控制)所需的最少逻辑。其他所有内容都应包含在模型中。

一般来说,你应该争取胖模型和瘦控制器。您的控制器方法应该只包含几行代码。如果控制器操作变得过于繁琐,那么您应该考虑将逻辑移出到 Models 文件夹中的新类中。

查看:

HomeController 类公开的两个控制器操作,Index() 和 About(),都返回一个视图。视图包含发送到浏览器的 HTML 标记和内容。使用 ASP.NET MVC 应用程序时,视图相当于页面。

您必须在正确的位置创建视图。 HomeController.Index() 操作返回位于以下路径的视图:

\Views\Home\Index.aspx

HomeController.About() 操作返回位于以下路径的视图:

\Views\Home\About.aspx

一般来说,如果你想返回一个控制器动作的视图,那么你需要在 Views 文件夹中创建一个与你的控制器同名的子文件夹。在子文件夹中,您必须创建一个与控制器操作同名的 .aspx 文件。

控制器:

控制器负责控制用户与 MVC 应用程序交互的方式。控制器包含 ASP.NET MVC 应用程序的流控制逻辑。当用户发出浏览器请求时,控制器决定向用户发送什么响应。

控制器只是一个类(例如,Visual Basic 或 C# 类)。示例 ASP.NET MVC 应用程序包括一个名为 HomeController.cs 的控制器,该控制器位于 Controllers 文件夹中。 HomeController.cs 文件的内容如清单 2 所示。

这是一个关于理解 MVC 的好视频。 http://www.asp.net/mvc/videos/mvc-2/how-do-i/understanding-models-views-and-controllers

【讨论】:

  • 感谢您的回复。我已经在 VS 2013 中使用带有 Identity 2.0 和 Code First 的 MVC 模式构建了应用程序。我也很清楚 MVC 模式。该场景要求我必须从另一个应用程序的外部数据库中获取数据。我只需要检索数据并将其显示在视图中。仅此而已(没有创建更新或删除)。如果我编写一个模型,这将变得非常复杂和耗时,也是不必要的,因为这需要连接超过 10 个表、SP 和 DB 视图,而我的要求只有几个选择查询。
  • 对不起,我的无知,也许您可​​以将 ADO.NET 用于该区域,我知道它会使它有点混乱,但这里有一个链接可能会有所帮助。 c-sharpcorner.com/uploadfile/raj1979/…。或者只使用原始 SQL 查询。 nakov.com/blog/2011/01/12/…
  • 您是否可以在应用程序中使用网络表单。使用您背后的代码应该能够访问您需要的任何数据库。 hanselman.com/blog/…
  • 我找到了使用 SqlDataAdapter() 和 DataSet 的解决方案 -- DataSet dsRecordSet = new DataSet(); sqlDap = new SqlDataAdapter(查询, sqlConn); sqlDap.Fill(dsRecordSet);返回(ds​​RecordSet.Tables[0]);另一种方法是使用 DbDataReader
猜你喜欢
  • 2015-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多