asp.net – 使用外部connectionStrings.config文件进行WebPublish Code-First迁移

前端之家收集整理的这篇文章主要介绍了asp.net – 使用外部connectionStrings.config文件进行WebPublish Code-First迁移前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前有一个利用Entity Framework Code-First迁移和Web Publish的项目,其中connectionStrings存储在web.config文件中.

现在是时候将connectionStrings移到web.config之外了,因此我们将它们放入connectionString.config文件中,并让它们在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 Publish(Build – > Publish Project)的对话框时,在设置选项卡中我收到错误

No Databases found in the project

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

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

解决方法

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

我列出了这些细节,因为它会引起一些完美的风暴.试图摆脱它我遇到了一些不同的错误,不得不按照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的问题.

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

原文链接:https://www.f2er.com/aspnet/247332.html

猜你在找的asp.Net相关文章