我正在构建一个MVC解决方案,但是如果没有数据库错误,我无法修改我的模型。
我的初始化程序看起来像这样:
public class Initializer : DropCreateDatabaseIfModelChanges<DatabaseContext>
{
protected override void Seed(DatabaseContext context)
{
...
}
}
错误说:
EntityFramework.dll中发生了'System.Data.SqlClient.SqlException'类型的异常但未在用户代码中处理
其他信息:不能删除数据库'hemabiobank',因为它不存在或您没有权限。
如何获得删除数据库的权限?服务器提供商是否让我无法放弃它?
附带问题:我修改模型时如何避免丢失数据?
答案 0 :(得分:1)
删除数据库的权限可能来自许多方面。我能做的一件事是你用来访问数据库的权限不允许你删除数据库。您是否能够使用这些权限登录管理工作室并通过SQL删除数据库。
在避免在修改模型时丢失数据方面,您在考虑种子模型时是正确的,但您也可以使用数据库迁移:
我在另一个问题上写了以下内容,但它也很有用:
迁移提供了一种更新表/列等的方法,而不会丢失所有现有基础结构。
为了能够使用迁移首先修改代码,首先需要启用它们。为此,在NuGet包控制台中,只需键入Enable-Migrations并按回车键。完成此操作后,您可以对类,Dbsets,上下文等进行任何类型的更改,然后通过键入add-migration(此处的迁移名称)来更新它们。完成此操作后,您会注意到项目中创建了一个名为“迁移”的文件夹或类似的文件夹。在这里你会看到一些.cs文件,它们代表了你想要更新数据库时应用的代码。要在添加迁移后物理更新数据库,需要在控制台中运行Update-Database命令。这将改变数据库结构,而不会丢失您已经实现的所有内容。
您为每个迁移命名的原因是您可以在迁移之间进行切换,因此您可以返回到特定的更改并根据需要撤消进一步的更改。这就是为什么你会为你在Migrations文件夹中添加的每个迁移找到一个单独的.cs文件,因此它知道如何应用更改。
您还会注意到在数据库中创建的迁移历史记录表,这也表示您的更改,并在迁移时记录数据库的状态。