当前位置: 首页 > 编程语言 > C#

实体框架,自动应用迁移分享

时间:2023-04-10 20:38:28 C#

实体框架,自动应用迁移我首先使用实体??框架代码,通过以下代码设置AutomaticMigrationsEnabled为true:Database.SetInitializer(newMigrateDatabaseToLatestVersion());/////////////////////////////////公共类MigrateDBConfiguration:System.Data.Entity.Migrations.DbMigrationsConfiguration{publicMigrateDBConfiguration(){AutomaticMigrationsEnabled=true;AutomaticMigrationDataLossAllowed=true;在项目的第一次运行中,它运行良好并创建了数据库和表。在我更改模型并删除一些字段或添加新字段并运行Add-Migration后,生成了迁移类,但在运行项目后出现此异常:EntityFramework中发生类型为“System.InvalidOperationException”的异常。在代码中处理的附加信息:支持“DBContext”上下文的模型自数据库创建以来已更改。编辑:就像arturomenchaca的回答一样,我可能改变了代码如下:...但例外情况是:已经有一个名为“MyTable”的对象。我想申请移民。自动迁移是指模型的变化不需要运行add-migration命令,但是必须手动运行update-database命令。如果在调用update-database时启用了“auto-migration”,则将添加一个“auto”迁移,如果模型中有未决更改,数据库将被更新。如果您希望在不调用更新数据库命令的情况下更新数据库,您可以将Database.SetInitializer(...)添加到上下文的OnModelCreating()方法中,如下所示:publicclassMyContext:DbContext{protectedoverridevoidOnModelCreating(DbModelBuildermodelBuilder){Database.SetInitializer(newMigrateDatabaseToLatestVersion());}...}publicclassMigrateDBConfiguration:System.Data.Entity.Migrations.DbMigrationsConfiguration{...请注意,您应该使用真实上下文声明DbMigrationsConfiguration和MigrateDatabaseToLatestVersion,而不是默认的DbContext。最后我找到了解决我的问题的方法。我在每次应用程序启动时调用此方法:varmigrator=newDbMigrator(配置);migrator.Configuration.TargetDatabase=newDbConnectionInfo(context.Database.Connection.ConnectionString,"System.Data.SqlClient");varmigrations=migrator.GetPendingMigrations();if(migrations.Any()){varscriptor=newMigratorScriptingDecorator(migrator);varscript=scriptor.ScriptUpdate(null,migrations.Last());如果(!string.IsNullOrEmpty(script)){context.Database.ExecuteSqlCommand(script);}}}}如果您的实体发生了变化,您需要先运行add-migration来创建迁移脚本。在那之后,在你的Global.asax中你需要有这样的代码varconfiguration=newMyProject.Configuration();varmigrator=newSystem.Data.Entity.Migrations.DbMigrator(配置);迁移器.Update();每次运行asp.net项目时,它都会检查是否有新的迁移正在运行并自动为您运行更新数据库。以上就是C#学习教程的全部内容:实体框架、应用自动迁移与分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处: