使用 DropCrateDatabaseIfModelChanges<> 删除数据库的权限

本文关键字:数据库 权限 删除 DropCrateDatabaseIfModelChanges 使用 | 更新日期: 2023-09-27 18:36:26

我正在构建一个MVC解决方案,但我无法在不收到数据库错误的情况下修改我的模型。

我的初始值设定项如下所示:

public class Initializer : DropCreateDatabaseIfModelChanges<DatabaseContext>
{
    protected override void Seed(DatabaseContext context)
    {
        ...
    }
}

错误说:

EntityFramework 中发生类型为"System.Data.SqlClient.SqlException"的异常.dll但未在用户代码中处理

附加信息:无法删除数据库"hemabiobank",因为它不存在或您没有权限。

如何获得删除数据库的权限?是服务器提供商让我无法删除它吗?

附带问题:修改模型时如何避免丢失数据?

使用 DropCrateDatabaseIfModelChanges<> 删除数据库的权限

删除数据库的权限可能来自许多事情。我可以想到的一个问题是,您用于访问数据库的权限不允许删除数据库。您是否能够使用这些权限登录到管理工作室并通过SQL删除数据库。

在修改模型时避免丢失数据方面,您对种子模型的思考是正确的,但您也可以使用数据库迁移:

我在另一个问题上写了以下内容,但在这里也很有用:

迁移提供了一种更新表/列等的方法,而不会丢失所有现有基础结构。

为了能够首先使用迁移修改代码数据库,您首先需要启用它们。为此,只需在 NuGet 包控制台中键入"启用迁移",然后按 Return 键。完成此操作后,您可以对类、数据库集、上下文等进行任何类型的更改,然后通过键入 add-migration(此处为迁移名称)来更新它们。完成此操作后,您会注意到在项目中创建了一个名为"迁移"或类似内容的文件夹。在此内容中,您将看到一些.cs文件,这些文件表示要更新数据库时将应用的代码。要在添加迁移后物理更新数据库,您需要在控制台中运行 Update-Database 命令。这将改变数据库结构,而不会丢失您已经实现的一切。

为每个迁移命名的原因是,您可以在迁移之间切换,因此您可以返回到特定更改并在需要时撤消进一步的更改。这就是为什么您会在"迁移"文件夹中找到每个迁移的单独.cs文件,以便它知道如何应用更改。

您还会注意到在数据库中创建的迁移历史记录表,该表也表示您的更改,并记录该迁移时数据库的状态。