如何遷移沒有nuget的數據庫?在生產環境中使用帶有nuget的Visual Studio是不可能的。目前,很多示例只教會我們使用帶有nuget的Visual Studio。 如何使用生成的DbMigration類?EF Code First DbMigration without nuget
12
A
回答
12
最簡單的方法是:
Database.SetInitializer(
new MigrateDatabaseToLatestVersion<MyDbContext,
MyDbMigrationsConfiguration>());
初始化的DbContext時,這將運行遷移。
您還可以強制手動執行:
var migrator = new DbMigrator(new MyMigrationsConfiguration());
migrator.Update();
(我相信你也必須設置TargetDatabase
上的配置,但你可以試試)
2
4
您可以使用遷移到最新版本Web.config設置 - 請參閱this blog post by Rowan Miller:
如果使用Code First Migrations,則可以使用MigrateDatabaseToLatestVersion initializ自動遷移數據庫呃。
<contexts>
<context type="Blogging.BlogContext, MyAssembly">
<databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[Blogging.BlogContext,
MyAssembly], [Blogging.Migrations.Configuration, MyAssembly]], EntityFramework" />
</context>
</contexts>
只是交換在這裏你的上下文類:在System.Data.Entity.MigrateDatabaseToLatestVersion是內置於EF。此設置更新舊版AppSettings版本的相同想法。
在我看來,這是最好的方式,因爲使用哪個初始化器的配置真的是一個配置,而且您希望能夠對此進行Web.config配置,並且理想情況下可以將配置轉換應用於您的不同環境。
5
下面是選項:
- 使用migrate.exe命令行工具,在我們的NuGet 包船舶。
- 使用MigrateDatabaseToLatestVersion初始值設定項,如其他人所描述的 。
- 使用可從 DbMigrator類獲得的運行時API。
0
我正在尋找一種方法來控制哪些遷移在代碼中顯式運行,而無需啓用DbConfiguration類或自動遷移。
所以我設法創建以下擴展名:
public static void RunMigration(this DbContext context, DbMigration migration)
{
var prop = migration.GetType().GetProperty("Operations", BindingFlags.NonPublic | BindingFlags.Instance);
if (prop != null)
{
IEnumerable<MigrationOperation> operations = prop.GetValue(migration) as IEnumerable<MigrationOperation>;
var generator = new SqlServerMigrationSqlGenerator();
var statements = generator.Generate(operations, "2008");
foreach (MigrationStatement item in statements)
context.Database.ExecuteSqlCommand(item.Sql);
}
}
舉個例子,有像遷移如下:
using (var dbCrm = new CrmDbContext(connectionString))
{
var migration = new CreateIndexOnContactCodeMigration();
migration.Up();
dbCrm.RunMigration(migration);
}
:
public class CreateIndexOnContactCodeMigration : DbMigration
{
public override void Up()
{
this.CreateIndex("Contacts", "Code");
}
public override void Down()
{
base.Down();
this.DropIndex("Contacts", "Code");
}
}
你可以用你的DbContext運行
1
還有另一種解決方案:
Using DB = New SHAContext()
If DB.Database.Exists() Then
Dim migrator As New DbMigrator(New SHAClassLibrary.Migrations.Configuration())
For Each m In migrator.GetDatabaseMigrations()
Try
migrator.Update(m)
Catch ex As Exception
End Try
Next
End If
'DB.test()
End Using
相關問題
- 1. EF Code First - IsConcurrencyToken()
- 2. 使用Code First和EF
- 3. EF Code First Drop Database?
- 4. EF Code First「Transactional Issue」
- 5. EF Code First部署
- 6. EF Code First Readonly列
- 7. Fluent Code First EF 4.3
- 8. EF 5 Code First添加列
- 9. 使用EF Code First的SQLite
- 10. EF 4.1 Code First POCOs Library
- 11. EF Code First,no edmmetadata table
- 12. EF 5.0 Code First dbContext Remove Child
- 13. EF Code First to SQL Azure
- 14. EF Code First DBContext and Transactions
- 15. EF POCO和EF Code First有何區別?
- 16. 從EF Code First生成EDM視圖
- 17. 速度更快EF 4.1 Code First或EF 4.0 Model First?
- 18. 手動修改EF Code First Migration步驟,無擾動
- 19. 在Code First DbMigration中更新存儲過程
- 20. EF Code First CTP 5和SQL SErver 2008 R2
- 21. 使用EF Code First添加SqlMembership表
- 22. EF Code First Migrations錯誤的錯誤
- 23. EF Code-First - 映射存儲過程
- 24. EF Code First - 擺脫遷移文件
- 25. EF Code First和SQL Server視圖
- 26. EF Code-First - 存儲IEnumerable枚舉
- 27. 如何在EF Code First中使用LinTY?
- 28. CTP5 EF Code First與Linq-to-sql
- 29. EF Code First Migrations - 未檢測到更改
- 30. 使用EF Code First存儲圖形