在 mvc 中启用自动迁移
Enable Automatic Migrations in mvc
我正在创建一个 MVC 应用程序,我经常在其中添加新的 类。由于 类 彼此相关,并且已经创建的表中的测试数据没有意义,我更喜欢使用 AutomaticMigrations。
我使用以下命令将数据库设置为初始状态。
Update-Database –TargetMigration: $InitialDatabase
但问题是它并不总是有效。它出错的可能原因是什么?我不熟悉代码优先迁移。
该错误主要是在运行时抛出的,表明 DbContext 已更改。在启用迁移之前,我确保现有表与删除的表之间没有依赖关系。我还收到一条错误消息,指出
Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong.
我正在寻找有关该主题的一般帮助。
如果您需要一般帮助,我认为 Microsoft 的 documentation 对初学者来说相当不错。他们还有一些很好的教程,可以帮助您从头开始正确入门。
对于您当前的问题,您能否详细说明具体问题?错误消息显示您需要自己修复的问题,不一定是 EF 的问题。
更新:
使用以下行修改自定义 DbContext 的构造函数:
Database.SetInitializer<MyDbContext>(null);
如果您总是想重新创建数据库而不是针对初始数据库迁移,则应该使用 DropCreateDatabaseIfModelChanges
。有关 asp.net website 主题的更多信息
在您上下文的构造函数中,例如
public class SchoolDBContext: DbContext
{
public SchoolDBContext(): base("SchoolDBConnectionString")
{
Database.SetInitializer<SchoolDBContext>(new DropCreateDatabaseIfModelChanges<SchoolDBContext>());
}
对于自动迁移,您应该首先在数据库上下文构造函数中设置数据库初始化程序。
public class YourDBContext: DbContext
{
public YourDBContext(): base("ConnectionString")
{
Database.SetInitializer<YourDBContext>(new CreateDatabaseIfNotExists<YourDBContext>());
}
您还可以创建自定义数据库初始化器,实现 CreateDatabaseIfNotExists<YourDBContext>
并覆盖种子方法以提供初始数据。
其次,您应该使用程序包管理器控制台中的命令启用自动迁移 Enable-Migrations -EnableAutomaticMigrations
然后在程序包管理器控制台中使用 Update-Database
命令会将您在上次迁移后所做的所有待定更改应用到数据库。
更新:
使用 Verbose
with update database 命令查看生成了什么脚本
Update-Database –Verbose
我正在创建一个 MVC 应用程序,我经常在其中添加新的 类。由于 类 彼此相关,并且已经创建的表中的测试数据没有意义,我更喜欢使用 AutomaticMigrations。
我使用以下命令将数据库设置为初始状态。
Update-Database –TargetMigration: $InitialDatabase
但问题是它并不总是有效。它出错的可能原因是什么?我不熟悉代码优先迁移。
该错误主要是在运行时抛出的,表明 DbContext 已更改。在启用迁移之前,我确保现有表与删除的表之间没有依赖关系。我还收到一条错误消息,指出
Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong.
我正在寻找有关该主题的一般帮助。
如果您需要一般帮助,我认为 Microsoft 的 documentation 对初学者来说相当不错。他们还有一些很好的教程,可以帮助您从头开始正确入门。
对于您当前的问题,您能否详细说明具体问题?错误消息显示您需要自己修复的问题,不一定是 EF 的问题。
更新:
使用以下行修改自定义 DbContext 的构造函数:
Database.SetInitializer<MyDbContext>(null);
如果您总是想重新创建数据库而不是针对初始数据库迁移,则应该使用 DropCreateDatabaseIfModelChanges
。有关 asp.net website 主题的更多信息
在您上下文的构造函数中,例如
public class SchoolDBContext: DbContext
{
public SchoolDBContext(): base("SchoolDBConnectionString")
{
Database.SetInitializer<SchoolDBContext>(new DropCreateDatabaseIfModelChanges<SchoolDBContext>());
}
对于自动迁移,您应该首先在数据库上下文构造函数中设置数据库初始化程序。
public class YourDBContext: DbContext
{
public YourDBContext(): base("ConnectionString")
{
Database.SetInitializer<YourDBContext>(new CreateDatabaseIfNotExists<YourDBContext>());
}
您还可以创建自定义数据库初始化器,实现 CreateDatabaseIfNotExists<YourDBContext>
并覆盖种子方法以提供初始数据。
其次,您应该使用程序包管理器控制台中的命令启用自动迁移 Enable-Migrations -EnableAutomaticMigrations
然后在程序包管理器控制台中使用 Update-Database
命令会将您在上次迁移后所做的所有待定更改应用到数据库。
更新:
使用 Verbose
with update database 命令查看生成了什么脚本
Update-Database –Verbose