【问题标题】:WebPublish Code-First Migrations with external connectionStrings.config file带有外部 connectionStrings.config 文件的 WebPublish 代码优先迁移
【发布时间】:2015-01-07 15:26:28
【问题描述】:

我目前有一个使用实体框架代码优先迁移和网络发布的项目,其中连接字符串存储在 web.config 文件中。

是时候将 connectionStrings 移到 web.config 之外了,因此我们将它们放入 connectionString.config 文件中,并让 slowcheetah 在 webpublish 上对其进行转换。

connectionStrings.config

<connectionStrings>
    <!-- Testing Databases -->
    <add
        connectionString="server=testserver;database=testdatabasename;user id=someid;password=*******"
        name="dbname"
        providerName="System.Data.SqlClient"
    /> 
</connectionStrings>

web.config 相关部分

  <connectionStrings configSource="config\connectionStrings.config">
  </connectionStrings>

现在,当我加载 Web 发布对话框(构建 -> 发布项目)时,在设置选项卡中我收到错误

No Databases found in the project

这表明对话框不够智能,无法查看 configSource 并从那里加载数据。我可以确认connectionStrings在我的开发环境中正确加载,我还可以确认slowcheetah正在正确地将配置转换到它的生产环境中。

有没有办法让 Visual Studio Publish 查看我的配置配置,并允许代码优先迁移?

【问题讨论】:

  • This 可能对你有帮助。
  • @Siva 不幸的是,这不是问题,其他配置文件已经部署得很好。这是 Visual Studio 方面的一个问题 :(
  • 我有完全相同的问题,在 VS 2015 CTP 中,虽然我很确定我也可以在 VS2013 上复制它。如果我使用外部 ConnString.config 文件,则“发布 Web”对话框不会拾取连接字符串,并且我无法使用 Code First 迁移。有没有人找到解决方法?
  • 到目前为止,没有,我所有的外部连接字符串配置文件都没有源代码,我把它们放回了 web.config。我认为这对于 VS / WebDeploy 微软团队来说可能是一个合法的错误。

标签: asp.net entity-framework visual-studio-2013 entity-framework-migrations webdeploy


【解决方案1】:

我也遇到了同样的问题,首先在一个单独的项目中使用 Entity Framework 6 代码,而不是使用 Visual Studio 2013 Update 4 在 .net 4.5 下发布的项目,并通过 connectionStrings 的 configSource 属性使用类似的共享方法。

我列出了这些细节,因为它会引起一场完美风暴。根据EF blog they know it's a mess and are re-factoring their approach,试图摆脱它,我遇到了一些不同的错误并且不得不以几种不同的方式破解它。这是我能想到的最好的(这里是龙):

发布向导似乎不理解 configSource,所以我从 web.config 中的 conectionStrings 中删除了它,留下了一个空元素(你也可以完全删除它,但我觉得一个现有但空的元素最好带有注释更合适)。为了使其在本地工作,我添加了一个连接工厂以使事情在调试模式下(本地)工作并使发布向导找到数据库迁移。我使用了工厂,因为 connectionString 总是取代工厂,我需要滥用它来使项目在任何转换之前工作。还要确保您传递给 dbcontext 构造函数的字符串又名“connectionStringOrDatabaseName”既是连接字符串又是数据库名称(使工厂生成的 db 与连接字符串 db 匹配)。

现在它找到了数据库并在本地工作,但它并没有真正使用您的 sharedConfig(因此不会总是在发布时工作)。为了解决这个问题,我使用 web.config 转换到 xsd:使用 configSource 替换/插入空/缺少的 connectionStrings 元素。如果您现在尝试发布,您会遇到invalid connectionStrings element is produced 的问题。

尽管如此接近,但我无法直接找到/找出解决该问题的方法,因此我不得不采用另一种解决方法:我 created a custom transformation aka xsd:Import 在给定 configSource 属性时将父元素替换为另一个文件中的那个,我将把实现留给读者作为练习。

【讨论】:

    猜你喜欢
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多