在 ASP.NET 核心 MVC 中使用 ORM 的正确方法?
Right way to use ORM in ASP.NET Core MVC?
一个没有经验的网络开发人员大声求助!
简介
我正在开发一个 MVC 网络应用程序(使用 ASP.NET 核心,因为我对它很感兴趣)。
在后端,有一个 MSSQL 服务器和相当复杂的数据库(数千个表)。
在我的项目中,我想根据用户的查询(发送表单请求)在视图(在表中)中显示部分 public 数据,然后允许用户下载数据(CSV,XML).
架构挑战
- 数据访问层
首先,我开始使用 Entity Framework,但后来意识到根本无法将我所有的 SQL 语句转换为 LINQ。原因是最简单的查询包含几个 INNER JOINS 和 LEFT JOINS 和 SELECT 语句以及无数个表。
- 业务逻辑层
我打算构建一个 REST API,以 JSON 格式发送数据。就 .NET Core MVC 而言,我可以将我的 API 控制器与我的表示层放在同一个项目中。
- 表示层
这是我唯一有经验的部分,使用 MVC 5 构建 Web 应用程序。
大斗争
在这个项目中,我不会操作数据,只会读取数据并将其呈现给用户。我知道使用不同模型 class(域、实体、视图模型)
的准则
我现在做的,估计是错的:
MVC的API控制器returnsSQL查询结果为类型DataTable对象(有一个SQLHelperclass来做这个工作),到目前为止,我的控制器负责将对象序列化为 JSON.
另一个控制器(从视图绑定模型)通过 HTML-forms 获取用户搜索条件,并调用 API 控制器绑定相应的属性。
题终于来了
- 我是否应该坚持使用原始 SQL 查询而不是 Entity Framework,如果是这样,我是否应该使用简单分离的 class 库(作为数据访问层)并引用它在 API?或者省略 DAL 并将所有 SQL 查询逻辑放入 API?
- 是否需要在只读的情况下使用Entity Framework
数据未经处理?我打算做的唯一操作是在逻辑层中格式化外观。
更新编辑:
在我的 SQL 查询中,我必须创建 LINQ 不支持的临时表。有什么建议吗?
如果这个问题将被标记为体系结构问题而不是编程问题,请接受我的道歉,并请将我引到合适的论坛以获得帮助。
非常感谢!
您会发现 LINQ 查询比 SQL 更容易理解和调试。将数据访问层作为一个单独的项目,并对查询进行单元测试。为了遵守 SOLID 原则,不要将数据层与 api 混合。如果您刚刚起步,EF Core 可能比 EF6 更好,主要是因为速度和便携性。
一个没有经验的网络开发人员大声求助!
简介
我正在开发一个 MVC 网络应用程序(使用 ASP.NET 核心,因为我对它很感兴趣)。 在后端,有一个 MSSQL 服务器和相当复杂的数据库(数千个表)。 在我的项目中,我想根据用户的查询(发送表单请求)在视图(在表中)中显示部分 public 数据,然后允许用户下载数据(CSV,XML).
架构挑战
- 数据访问层
首先,我开始使用 Entity Framework,但后来意识到根本无法将我所有的 SQL 语句转换为 LINQ。原因是最简单的查询包含几个 INNER JOINS 和 LEFT JOINS 和 SELECT 语句以及无数个表。
- 业务逻辑层
我打算构建一个 REST API,以 JSON 格式发送数据。就 .NET Core MVC 而言,我可以将我的 API 控制器与我的表示层放在同一个项目中。
- 表示层
这是我唯一有经验的部分,使用 MVC 5 构建 Web 应用程序。
大斗争
在这个项目中,我不会操作数据,只会读取数据并将其呈现给用户。我知道使用不同模型 class(域、实体、视图模型)
的准则我现在做的,估计是错的:
MVC的API控制器returnsSQL查询结果为类型DataTable对象(有一个SQLHelperclass来做这个工作),到目前为止,我的控制器负责将对象序列化为 JSON.
另一个控制器(从视图绑定模型)通过 HTML-forms 获取用户搜索条件,并调用 API 控制器绑定相应的属性。
题终于来了
- 我是否应该坚持使用原始 SQL 查询而不是 Entity Framework,如果是这样,我是否应该使用简单分离的 class 库(作为数据访问层)并引用它在 API?或者省略 DAL 并将所有 SQL 查询逻辑放入 API?
- 是否需要在只读的情况下使用Entity Framework 数据未经处理?我打算做的唯一操作是在逻辑层中格式化外观。
更新编辑:
在我的 SQL 查询中,我必须创建 LINQ 不支持的临时表。有什么建议吗?
如果这个问题将被标记为体系结构问题而不是编程问题,请接受我的道歉,并请将我引到合适的论坛以获得帮助。
非常感谢!
您会发现 LINQ 查询比 SQL 更容易理解和调试。将数据访问层作为一个单独的项目,并对查询进行单元测试。为了遵守 SOLID 原则,不要将数据层与 api 混合。如果您刚刚起步,EF Core 可能比 EF6 更好,主要是因为速度和便携性。