转换web.config
不适用于Entity Framework CodeFirst,因为连接字符串是在发布后转换后动态添加的。在释放到不同的环境时,我们在CodeFirst的代码中设置了动态连接设置。
我尝试了正确的删除方法,但已发布的结果最终以web.config
中的连接字符串结束。
这有什么工作吗?在我们的web.config
中添加连接信息不是一种选择。在运行时动态添加连接信息效果很好。
问题是当发布在web.config
中添加连接信息时,应用程序会收到500错误,因为codefirst正在尝试使用无效的连接字符串来创建非创建沙箱的环境。
我们正在运行时更改它,这是有效的。
public MyAppDataContext()
{
this.Database.Connection.ConnectionString = OurDynamicConfigSettings.GetSetting("MyAppConnectionString");
}
尽管codefirst在我们动态设置之前尝试使用web.config
中的内容。解决方法是从web.config中删除连接信息。
这一切都有效,除非在构建服务器或发布时构建,每次我们发布时,codefirst都会将连接信息重新插入到web.config中。每次都要记得删除它不是好习惯,如果你忘了就容易出错。
我们的转换文件中删除连接字符串的代码应该有效,但不能。
<connectionStrings>
<add xdt:Transform="Remove" xdt:Locator="XPath(configuration/connectionStrings[@name='MyAppConnectionString'])" />
</connectionStrings>
答案 0 :(得分:2)
你的转变应该是:
<connectionStrings>
<add xdt:Transform="Remove" xdt:Locator="Match(name)" name="MyAppConnectionString" />
</connectionStrings>
但是,我要问..你的数据库中存储的连接字符串是什么?为什么需要在代码中执行它们?
你可以这样做:
public class MyDataContext : DbContext {
public MyDataContext(string connectionString) : base(connectionString)
...
}
然后,当您创建上下文时,执行此操作:
using(var context =
new MyDataContext(OurDynamicConfigSettings.GetSetting("MyAppConnectionString"))) {
...
}
答案 1 :(得分:0)
public partial class MyContextEntities : DbContext
{
public MyContextEntities(string ConnectionString="[Your Entity Connection String Here]")
: base(ConnectionString)
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
}
在连接字符串中用“(单引号)替换”