使用Entity Framework Code First从Web.config中删除连接字符串

时间:2014-03-06 21:30:17

标签: c# asp.net entity-framework ef-code-first

转换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>

2 个答案:

答案 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();
        }
}

在连接字符串中用“(单引号)替换”