如何在不使用nameOrConnectionString硬编码的情况下使用EF CodeFirst Migrations

wil*_*ten 5 migration entity-framework code-first dbcontext dbmigrator

如何在没有在所需的无参数构造函数的基础上对nameorconnectionstring进行硬编码的情况下使EF迁移工作?

EF迁移强制您向自定义dbcontext添加默认构造函数.在dbcontext的基础中,您必须提供nameorconnectionstring.

public class CustomDbContext : DbContextBase
    {
        public CustomDbContext ()
            : base("theconnectionstringwedontwanttoset") //hardcoded connection string
        {
        }
Run Code Online (Sandbox Code Playgroud)

我们需要对构造函数进行硬编码这一事实是我们无法使用的,因为在我们的客户端应用程序中,我们在没有配置文件的情况下工作,并且我们动态建立连接,因为我们连接到许多不同的数据库(服务器,本地sql compact).

在探索DbMigrationsConfiguration类之后,我找到了一个名为TargetDatabase的DbConnectionsInfo属性,可以在构造函数中设置它.但即使这个解决方案也行不通.这就是我做的:

public sealed class Configuration : DbMigrationsConfiguration<CustomDbContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = true;
            //Setting the TargetDatabase in the hope it will use it in the migration  
            TargetDatabase = new DbConnectionInfo("Server=xxx;Database=xxx;Trusted_Connection=True", "System.Data.SqlClient");
        }


public class MigrationInitializer : MigrateDatabaseToLatestVersion<CustomDbContext, Configuration>
    {
    }
Run Code Online (Sandbox Code Playgroud)

我可以看到最终在DbMigrator中使用了Activator.CreateInstance,我期望从这个类中使用TargetDatabase.Create ...或者其他东西.

欢迎任何帮助或反馈.

提前致谢,

Wilko

phi*_*ady 0

有可能是的请参阅此处的答案 我还在这个问题中包含了一个测试程序。