当我使用连接字符串名称创建上下文时,该连接按预期使用,但不是由运行迁移的代码使用!
该代码使用无参数构造函数创建一个新上下文,然后显然使用其默认连接解析机制,从而连接到不同的数据库!这对我来说似乎是非常不受欢迎的默认行为。为什么迁移不使用当前上下文,或者至少不使用与当前上下文相同的连接字符串?
我是否遗漏了什么,或者这是 Code First 迁移中的一个缺陷?解决此问题的最佳方法是什么?实现 IDbContextFactory?还是在上下文构造函数中使用 Database.SetInitializer 进行处理?
实际上,我最终查询了我的数据库而没有发生任何异常(因为我没有运行任何依赖于迁移的代码),同时秘密地在 SQLEXPRESS 中创建了一个全新的数据库。
使用的版本是带有 .NET 4 的 Entity Framework 6
为了证明我的发现,我从调试器中添加了一些屏幕图。第一个显示实际使用了从连接字符串 SiteSqlServer 获取的连接。第二个表明数据库初始化代码中使用的连接不同。第三个显示了屏幕打印时的堆栈跟踪。
(希望印刷品可读,放大帮助)