【问题标题】:ASP.NET Core MVC local database and model controllerASP.NET Core MVC 本地数据库和模型控制器
【发布时间】:2025-12-05 20:20:01
【问题描述】:

我使用MVC 模式(按照this 教程)创建了一个ASP.NET Core Web 应用程序,并将其连接到现在填充了一些数据的本地数据库。我有两个问题,如果有人帮助我理解并回答他们:

1) 我的默认连接字符串设置如下:

"ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-MyAppName;Trusted_Connection=True;MultipleActiveResultSets=true"
  }

是否可以仅通过更改此连接字符串中的名称和路径,在别处使用当前存储在其中的数据(例如,作为备份)重新创建完全相同的数据库?

我在这里找到了本地数据库:

C:\Users\my-name\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\MSSQLLocalDB

但是当我尝试复制.mdf 文件来备份数据库时,我收到一条错误消息,提示该文件已打开且无法复制。它在什么地方打开?我怎样才能简单地备份 db 文件?


2) 创建custom controller 后,我注意到我的Personmodel 提供的所有属性都用于自动生成的代码中;例如就我而言:

public async Task<IActionResult> Create([Bind("Birthday,ID,Username,EmailAddress")] PersonModel personModel)

我认为这意味着如果我们更改模型类中的代码,我们需要相应地搜索并影响更改,但后来我意识到如果我想继续使用自动生成的代码,我必须做所有和我第一次生成时的步骤一样,然后当它询问我是否要用新代码替换旧代码时,我选择是。

有没有更好的方法来做到这一点,因为这样每次都会覆盖我的自定义代码并破坏存储在我本地数据库中的数据。特别是,当我将数据存储在其本地数据库中,然后我决定更改列名或添加某些内容时,这将覆盖所有内容...

遇到这种情况该怎么办?

【问题讨论】:

    标签: c# sql-server asp.net-core


    【解决方案1】:

    问题 1

    与数据库关联的 .mdf 和其他文件将由 SQL Server 服务使用。如果要进行备份,请使用 SQL Server Management Studio - 右键单击​​对象资源管理器中的数据库,选择任务,然后选择备份。如果您想使用备份数据库,那么您需要恢复它 - 再次在对象资源管理器中,右键单击“数据库”文件夹并选择恢复数据库,然后浏览到您创建备份文件的位置。

    问题 2(9 月 7 日更新)

    当您更改模型类时,您可以在控制台中使用add-migration 命令生成一个新的迁移类,其中包含将数据库从其当前结构转换为与更新模型匹配的新结构的代码。如果迁移会导致数据丢失,那么在运行update-database之前备份数据库并以不同的名称恢复备份,然后您可以创建脚本将数据从备份转换为更新数据库的新结构。

    脚手架组件与实体框架迁移有点不同。迁移是真正自动生成的类,大多数时候您不需要更新(甚至查看)生成的代码。将脚手架组件看作更像是一种模板——它是一种开始使用您最可能需要的类、方法、标记等的方式,这比从头开始编写要快。虽然它不是编写代码的替代方案,但其目的是一旦您创建了脚手架代码,您将手动维护它。没有办法(据我所知)自动更新脚手架代码以匹配新模型,同时保留您对其所做的任何编辑。你有两个选择

    • 重新构建代码,然后将您的编辑应用到它
    • 手动更新代码以匹配新模型

    您真正能做的就是权衡这两种选择,然后决定哪一种最省力。

    【讨论】:

    • 非常感谢您的回答。第一个很清楚。第二个 - 通过自动生成的代码,我指的是在 Migrations 文件夹下创建的文件,其中包含创建数据库的代码以及模型控制器的所有其他样板代码以及 Views 文件夹下的所有 .cshtml 文件,等等……
    • 我的模型有20个属性,对应数据库表列,这些属性肯定会有变化,包括去掉一些,重命名一些,添加一些等等……不知道有没有方法来简单地修改我的模型类,然后自动更新使用这些属性的其余代码,而不是搜索实例、手动重命名或删除等......
    • 我按照this 教程进行了更新,但是上面提到的命令都没有真正起作用...
    • 啊,您使用脚手架创建了视图和控制器,如此处所述 docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/… ? (忽略该教程使用数据库优先方法而您使用的是代码优先方法的事实)。并且您已经对视图和控制器进行了自己的编辑,并且想要一种更新它们以匹配更新后的模型而不丢失您的编辑的方法?
    • 感谢您的澄清。我已经更新了答案,使其与您正在尝试做的事情更相关。