Nat*_*rty 8 asp.net entity-framework webdeploy ef-migrations visual-studio-2013
我目前有一个利用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>
Run Code Online (Sandbox Code Playgroud)
web.config相关部分
<connectionStrings configSource="config\connectionStrings.config">
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
现在,当我加载Web Publish(Build - > Publish Project)的对话框时,在设置选项卡中我收到错误
No Databases found in the project
Run Code Online (Sandbox Code Playgroud)
这向我表明对话框不够智能,无法查看configSource并从那里加载数据.我可以确认在我的开发人员环境中正确加载了connectionStrings,我还可以确认slowcheetah正在将配置转换为它的生产环境.
有没有办法让Visual Studio Publish看到我的配置配置,并允许代码优先迁移?
我也遇到了同样的问题,首先在 .net 4.5 下使用 Visual Studio 2013 Update 4 的已发布项目的单独项目中使用 Entity Framework 6 代码,并通过 connectionStrings 的 configSource 属性使用类似的共享方法。
我列出这些细节是因为它会引发一场完美风暴。在尝试摆脱它时,我遇到了一些不同的错误,并且不得不以几种不同的方式破解它,根据EF 博客,他们知道这是一团糟,正在重构他们的方法。这是我能想到的最好的(这里是龙):
发布向导似乎不理解 configSource,因此我将其从 web.config 中的 conectionStrings 中删除,留下一个空元素(您也可以完全删除它,但我觉得现有但空的元素最好带有注释更合适)。为了使其在本地工作,我添加了一个连接工厂,使事情在调试模式(本地)下工作,并使发布向导找到数据库迁移。我使用工厂是因为连接字符串总是取代工厂,我需要滥用它来使项目在任何转换之前工作。还要确保传递给 dbcontext 构造函数的字符串(又名“connectionStringOrDatabaseName”)既是连接字符串又是数据库名称(使工厂生成的数据库与连接字符串 db 匹配)。
现在它找到数据库并在本地工作,但它并没有真正使用您的共享配置(因此并不总是在发布时工作)。为了解决这个问题,我随后使用 web.config 转换为 xsd:使用 configSource 替换/插入空/缺失的 connectionStrings 元素。如果您现在尝试发布,您将遇到生成无效的 connectionStrings 元素的问题。
尽管距离如此之近,我无法直接找到/找出该问题的解决方案,因此我不得不采用另一种解决方法:我创建了一个自定义转换,又名 xsd:Import,当给定 configSource 属性时,它会用该属性替换父元素在另一个文件中,我将把实现留给读者作为练习。
| 归档时间: |
|
| 查看次数: |
993 次 |
| 最近记录: |