public void Update_creates_new_config_file_if_missing()
        {
            var configurationFile = Path.GetTempFileName();
            File.Delete(configurationFile);

            var updatedConfigurationFile = new ConfigurationFileUpdater().Update(configurationFile);
            Assert.True(File.Exists(updatedConfigurationFile));

            try
            {
                var updatedConfiguration = File.ReadAllText(updatedConfigurationFile);
                var entityFrameworkAssemblyName = typeof(DbContext).Assembly.GetName();

                Assert.Equal(
                        @"<?xml version=""1.0"" encoding=""utf-8""?>
<configuration>
  <runtime>
    <assemblyBinding xmlns=""urn:schemas-microsoft-com:asm.v1"">
      <dependentAssembly>
        <assemblyIdentity name=""EntityFramework"" culture=""neutral"" publicKeyToken=""b77a5c561934e089"" />
        <codeBase version=""" + entityFrameworkAssemblyName.Version + @""" href=""" + entityFrameworkAssemblyName.CodeBase + @""" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>",
                        updatedConfiguration);
            }
            finally
            {
                File.Delete(updatedConfigurationFile);
            }
        }
        public void Update_creates_new_config_file_if_missing()
        {
            var configurationFile = Path.GetTempFileName();

            File.Delete(configurationFile);

            var updatedConfigurationFile = new ConfigurationFileUpdater().Update(configurationFile);

            Assert.True(File.Exists(updatedConfigurationFile));

            try
            {
                var updatedConfiguration        = File.ReadAllText(updatedConfigurationFile);
                var entityFrameworkAssemblyName = typeof(DbContext).Assembly().GetName();

                Assert.Equal(
                    @"<?xml version=""1.0"" encoding=""utf-8""?>
<configuration>
  <runtime>
    <assemblyBinding xmlns=""urn:schemas-microsoft-com:asm.v1"">
      <dependentAssembly>
        <assemblyIdentity name=""Z.EntityFramework.Classic"" culture=""neutral"" publicKeyToken=""afc61983f100d280"" />
        <codeBase version=""" + entityFrameworkAssemblyName.Version + @""" href="""
                    + entityFrameworkAssemblyName.CodeBase + @""" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>",
                    updatedConfiguration);
            }
            finally
            {
                File.Delete(updatedConfigurationFile);
            }
        }
        public void Updated_file_can_resolve_sourceConfigs()
        {
            var directory = Path.GetTempFileName();

            File.Delete(directory);
            Directory.CreateDirectory(directory);

            try
            {
                var configPath = Path.Combine(directory, "App.config");
                File.WriteAllText(
                    configPath,
                    @"<?xml version='1.0' encoding='utf-8' ?>
<configuration>
  <connectionStrings configSource='connectionStrings.config' />
</configuration>");

                File.WriteAllText(
                    Path.Combine(directory, "connectionStrings.config"),
                    @"<?xml version='1.0' encoding='utf-8' ?>
<connectionStrings>
  <add name='MyConnectionString' connectionString='Data Source=.\SQLEXPRESS; Data Source=MyDatabase; Integrated Security=True' providerName='System.Data.SqlClient'/>
</connectionStrings>");

                var updatedConfigPath = new ConfigurationFileUpdater().Update(configPath);

                try
                {
                    var config = ConfigurationManager.OpenMappedExeConfiguration(
                        new ExeConfigurationFileMap
                    {
                        ExeConfigFilename = updatedConfigPath
                    },
                        ConfigurationUserLevel.None);

                    Assert.True(
                        config.ConnectionStrings.ConnectionStrings.Cast <ConnectionStringSettings>().Any(
                            css => css.Name == "MyConnectionString"));
                }
                finally
                {
                    File.Delete(updatedConfigPath);
                }
            }
            finally
            {
                Directory.Delete(directory, true);
            }
        }
Пример #4
0
        public void Update_adds_entity_framework_codebase_to_config()
        {
            var configurationFile = Path.GetTempFileName();

            try
            {
                File.WriteAllText(
                    configurationFile,
                    @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<configuration>
</configuration>");

                var updatedConfigurationFile = new ConfigurationFileUpdater().Update(configurationFile);
                Assert.True(File.Exists(updatedConfigurationFile));

                try
                {
                    var updatedConfiguration        = File.ReadAllText(updatedConfigurationFile);
                    var entityFrameworkAssemblyName = typeof(DbContext).Assembly().GetName();

                    Assert.Equal(
                        @"<?xml version=""1.0"" encoding=""utf-8""?>
<configuration>
  <runtime>
    <assemblyBinding xmlns=""urn:schemas-microsoft-com:asm.v1"">
      <dependentAssembly>
        <assemblyIdentity name=""EntityFramework"" culture=""neutral"" publicKeyToken=""b77a5c561934e089"" />
        <codeBase version=""" + entityFrameworkAssemblyName.Version + @""" href="""
                        + entityFrameworkAssemblyName.CodeBase + @""" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>",
                        updatedConfiguration);
                }
                finally
                {
                    File.Delete(updatedConfigurationFile);
                }
            }
            finally
            {
                File.Delete(configurationFile);
            }
        }
Пример #5
0
        public ToolingFacade(
            string migrationsAssemblyName,
            string contextAssemblyName,
            string configurationTypeName,
            string workingDirectory,
            string configurationFilePath,
            string dataDirectory,
            DbConnectionInfo connectionStringInfo)
        {
            Check.NotEmpty(migrationsAssemblyName, "migrationsAssemblyName");

            _migrationsAssemblyName = migrationsAssemblyName;
            _contextAssemblyName = contextAssemblyName;
            _configurationTypeName = configurationTypeName;
            _connectionStringInfo = connectionStringInfo;

            var info = new AppDomainSetup
                {
                    ShadowCopyFiles = "true"
                };

            if (!string.IsNullOrWhiteSpace(workingDirectory))
            {
                info.ApplicationBase = workingDirectory;
            }

            _configurationFile = new ConfigurationFileUpdater().Update(configurationFilePath);
            info.ConfigurationFile = _configurationFile;

            var friendlyName = "MigrationsToolingFacade" + Convert.ToBase64String(Guid.NewGuid().ToByteArray());

            _appDomain = AppDomain.CreateDomain(friendlyName, null, info);

            if (!string.IsNullOrWhiteSpace(dataDirectory))
            {
                _appDomain.SetData("DataDirectory", dataDirectory);
            }
        }
        public void Updated_file_can_resolve_sourceConfigs()
        {
            var directory = Path.GetTempFileName();
            File.Delete(directory);
            Directory.CreateDirectory(directory);

            try
            {
                var configPath = Path.Combine(directory, "App.config");
                File.WriteAllText(
                    configPath,
                    @"<?xml version='1.0' encoding='utf-8' ?>
<configuration>
  <connectionStrings configSource='connectionStrings.config' />
</configuration>");

                File.WriteAllText(
                    Path.Combine(directory, "connectionStrings.config"),
                    @"<?xml version='1.0' encoding='utf-8' ?>
<connectionStrings>
  <add name='MyConnectionString' connectionString='Data Source=.\SQLEXPRESS; Data Source=MyDatabase; Integrated Security=True' providerName='System.Data.SqlClient'/>
</connectionStrings>");

                var updatedConfigPath = new ConfigurationFileUpdater().Update(configPath);

                try
                {
                    var config = ConfigurationManager.OpenMappedExeConfiguration(
                        new ExeConfigurationFileMap
                            {
                                ExeConfigFilename = updatedConfigPath
                            },
                        ConfigurationUserLevel.None);

                    Assert.True(config.ConnectionStrings.ConnectionStrings.Cast<ConnectionStringSettings>().Any(css => css.Name == "MyConnectionString"));
                }
                finally
                {
                    File.Delete(updatedConfigPath);
                }
            }
            finally
            {
                Directory.Delete(directory, true);
            }
        }