[英]Remove ConnectionString from Web.config using Entity Framework CodeFirst
转换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>
你的转变应该是:
<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"))) {
...
}
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();
}
}
在连接字符串中替换“with”(单引号)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.