慢猎豹不转换为实体框架迁移

本文关键字:实体 框架 迁移 转换 猎豹 | 更新日期: 2023-09-27 18:15:12

我使用EF Code-First Migrations:https://msdn.microsoft.com/en-us/data/jj591621.aspxadd-migration, update-database等都是从VS.

中的包管理器控制台调用的。

我还使用SlowCheetah来管理我们拥有的各种环境,特别是包括管理这样一个事实,即每个开发人员都有自己的数据库副本,这样他们就可以更新他们的模型更改,而不会将其他人锁定在数据库之外。因此,改变的配置值之一是目标DB名称。

(由于我不会深入的原因,我们不使用connectionStrings .config设置,而是在appSettings块中使用DB名称)

包含模型和迁移的项目是TheCustomer.Database项目。

如果我手动更改TheCustomer.Database/app.config中的appSetting值,并运行迁移,它会正确使用配置值-因此配置基本上是工作的。

但是如果我设置了一个SlowCheetah转换来修改给定构建配置的值,选择该配置,重新构建代码,然后运行迁移,那么它不应用转换;它使用基础的app.config的值,而不是app.SelectBuildConfig.config

SlowCheetah在一般情况下工作良好-当我运行sln以获得一个网站时,它使用由VS构建配置确定的正确Db。

任何想法吗?

编辑:

ConfigFile:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>
  <appSettings>
    <add key="DbName" value="This Default Value shouldn't work - you should be using a value for a specific build" />
    <add key="DbPassword" value="SomePassword" />
  </appSettings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup></configuration>

和变换

<?xml version="1.0" encoding="utf-8" ?>
<!-- For more information on using transformations 
     see the web.config examples at http://go.microsoft.com/fwlink/?LinkId=214134. -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <appSettings>
        <add key="DbName" value="LocalDev_MDM" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
    </appSettings>
</configuration>

慢猎豹不转换为实体框架迁移

@Serg-Rogovtsev是对的,EF不知道SlowCheetah。在ef core的源代码中搜索之后,似乎没有办法让ef考虑转换后的.config,特别是当你的DbContext在一个独立于启动项目的项目中声明时,当使用依赖注入时更是如此。

还有两种方法:

  1. 显式定义连接字符串,如update-database -ConnectionString "Server=(localdb)'MSSQLLocalDB;Database=MyDb;Integrated Security=True;" -ConnectionProviderName System.Data.SqlClient
  2. 定义你的根app.config文件,这样默认值(没有转换)就可以用EF迁移,并确保你的转换对剩余的构建是正确的,这显然不会工作,因为你的开发人员使用不同的db…所以也许使用相同的DB名称,但使用localdb或多个服务器,并使用DNS重定向到个别开发人员

我有一个比较复杂的方法,有多个没有链接的项目、依赖注入和EF,在我引入SC转换之前,这些项目都没有问题。