首先,让研究摆脱困境。我已经在这里看到并应用了这个问题的答案:Web Deploy/Publish is adding a unknown connection string?Web部署添加额外的连接字符串(两次添加相同的连接)
它不起作用,我的意思是,它对我面临的问题没有任何影响。
另一个可能有用的信息是我正在使用Visual Studio 2015 Enterprise。
好吧,现在我面临的问题是一个奇怪的问题。我在我的web.config
文件中有两个数据库连接。他们是这样定义的:
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\Test.mdf;Initial Catalog=Test;Integrated Security=True" providerName="System.Data.SqlClient" />
<add name="ErpConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\Test.mdf;Initial Catalog=Test;Integrated Security=True" providerName="System.Data.SqlClient" />
与DefaultConnection
相关的背景是ApplicationDbContext
。与ErpConnection
相关的上下文是ErpEntityContext
。这些每一个被定义是这样的:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("name=DefaultConnection")
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
和:
public class ErpEntityContext : DbContext
{
public ErpEntityContext()
: base("ErpConnection")
{
}
}
然而,网络部署决定ApplicationDbContext
和DefaultConnection
必须是两个完全不同的东西,所以最终显示他们像在两种不同的连接下图:
从卸下摆脱了双重入口(这显然不是解决方案,因为我想让我的连接字符串)。更改连接字符串的名称完全不重要。这也不会发生在ErpConnection
。
这发生在Visual Studio的一个会话到另一个会话,并且昨天从无处出现。然后几个小时后,当我重新启动VS时,它会自动消失。我认为它是固定的,一切都很华丽,但今天它又重新出现了。我完全失去了这里可能会出错的地方。尽管我对解决方案感兴趣,但如果有人能告诉我为什么会发生这种情况,我也会很感激。
编辑:
为了澄清和回答在评论中提出的问题,我没有指定的任何转换,问题出现在所有生成配置。
此外,我试图发布与Remove additional files at destination
选中和未选中。同样,我试图发布与Exclude files from the App_Data folder
检查和取消选中,看看我是否可以愚弄的东西(:))。但迄今为止无济于事。
UPDATE:
问题的进一步调查发现,罪魁祸首可能是DbConfiguration
使用Loaded
事件:
Loaded += (sender, args) => args.ReplaceService<DbProviderServices>((s, _) => new CachingProviderServices(s, transactionHelper, new ExampleCachingPolicy()));
此事件的文件说:
构建DbConfiguration后,在EF初始化期间发生 构造编辑,但就在它被锁定准备使用之前。使用此事件 检查和/或覆盖在配置锁定之前已注册的服务 。请注意,此事件应谨慎使用 ,因为它可能会阻止工具发现在运行时使用的相同 配置。
问题是如果需要使用此事件,修复将会是什么。如果我找到一个答案,我会写一个答案,但如果有其他人知道,请随时这样做。
您的意图是两个连接字符串是否相同?另外,你有没有指定任何转换(你可以扩展你的.config文件,看到子节点)?最后,这个问题是否适用于所有构建配置,只是调试等? – Basic
@Basic是的,这是正确的。但是,将这些字符串更改为不同的结果具有相同的结果。一个连接会显示两次,并在发布时出现混乱。 –
@基本感谢您的提问,我更新了问题以澄清情况。但总而言之,没有任何改变,并且在所有情况下都会发生。 –