【问题标题】:Breaking out data access code into a separate project将数据访问代码分解为单独的项目
【发布时间】:2021-07-16 04:39:27
【问题描述】:

我有一个使用 ASP.NET CORE 3.1(使用 Razor Pages)构建的 Web 应用程序。我正在使用 Entity Framework Core(代码优先)进行数据访问。一切都在同一个项目中,我们称之为 MyProject.Web。

现在我必须创建一个使用相同数据库的控制台应用程序。我的计划是将它作为一个新项目添加到与 Web 应用程序相同的解决方案中:MyProject.Console。

由于控制台应用程序将使用相同的数据库,在我看来,在解决方案中创建另一个项目 MyProject.Data 似乎是个好主意,该项目将包含用于数据库访问的实体和所有代码。这样,Web 应用程序和控制台应用程序都可以使用相同的代码进行数据访问。

这是个好主意吗?

我已经遇到了一些问题……我的实体已将验证实现为属性(来自 System.ComponentModel.DataAnnotations;)。但是,我还创建了一个自定义验证属性,要将其应用于实体,我还需要在 MyProject.Data 中具有验证属性类。此验证属性实现接口 IClientModelValidator 以便我的自定义验证也可以应用于客户端。 IClientModelValidator 接口位于 Microsoft.AspNetCore.Mvc.ModelBinding.Validation 命名空间中。首先,我不知道如何将必要的框架(Microsoft.AspNetCore.App)添加到项目MyProject.Data中。其次,无论如何添加该框架我似乎有点奇怪,因为这应该只是一个数据访问项目。

任何关于如何解决这个问题的建议,或者即使它是一个好主意,都非常欢迎。

【问题讨论】:

标签: asp.net .net asp.net-core entity-framework-core


【解决方案1】:

是的,分离项目(Web 应用程序项目、控制台应用程序项目和数据库项目)是个好主意。但是将域模型(数据库对象)暴露给 UI(Web 和控制台应用程序)是个坏主意。

因此,在数据库项目中,您将只添加带有 EF/数据库注释 (System.ComponentModel.DataAnnotations) 的所有域模型类,而无需任何 UI 验证。

在 Web 应用程序项目中,您必须添加 ViewModel/DTO 类,在这里您可以添加所需的验证以及与 UI 相关的任何内容,例如将域模型上的名字和姓氏属性组合到 FullName 属性并显示在用户界面。

您可以在此处查看有关 ViewModel 的更多信息:

What is ViewModel in MVC?https://www.tektutorialshub.com/asp-net-core/asp-net-core-model-and-viewmodel/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-02
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    相关资源
    最近更新 更多