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

时间:2016-02-26 13:08:49

标签: c# sql model-view-controller

我正在构建一个MVC解决方案,但是如果没有数据库错误,我无法修改我的模型。

我的初始化程序看起来像这样:

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

错误说:

  

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

     

其他信息:不能删除数据库'hemabiobank',因为它不存在或您没有权限。

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

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

1 个答案:

答案 0 :(得分:1)

删除数据库的权限可能来自许多方面。我能做的一件事是你用来访问数据库的权限不允许你删除数据库。您是否能够使用这些权限登录管理工作室并通过SQL删除数据库。

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

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

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

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

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

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