Entity framework 如何在mvc4中区分连接的调试和发布等

Entity framework 如何在mvc4中区分连接的调试和发布等,entity-framework,deployment,release,release-management,profiles,Entity Framework,Deployment,Release,Release Management,Profiles,所以我是一个全新的MVC4,很多模式对我来说都是新的 然而,我好奇的是关于发布/调试模式的最佳实践。 对于我来说,live和debug模式之间有很多不同之处,我希望它们都是自动的,所以我不需要更改任何内容来发布 例如,我在我的repo(域项目)中就这样做了 公共类EFAccountRepository:IAccountRepository { 私有efdbcontextu context public EFAccountRepository() { #if DEBUG

所以我是一个全新的MVC4,很多模式对我来说都是新的

然而,我好奇的是关于发布/调试模式的最佳实践。 对于我来说,live和debug模式之间有很多不同之处,我希望它们都是自动的,所以我不需要更改任何内容来发布

例如,我在我的repo(域项目)中就这样做了 公共类EFAccountRepository:IAccountRepository { 私有efdbcontextu context

    public EFAccountRepository()
    {
#if DEBUG
        _context = new EFDbContext("name=Debug");
#else
        _context = new EFDbContext("name=Live");
#endif
    }
在我的DI(webui)中也是这样

或者干脆就拥有它会更聪明吗

EFDbContext efcontext = new EFDbContext("name=MyApp");
然后用web.config转换MyApp的含义


自动调试/发布发布的任何其他技巧都受到热烈欢迎。

< P>使用Web.CONFIG转换

< P>我强烈建议不要硬编码您的连接字符串到您的代码中。请考虑将代码指向Web.CONFIG转换。您可以在那里添加连接字符串,并根据代码的版本可以应用r转换,因此您只需在应用程序中使用以下代码一次即可覆盖所有环境

ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString
在调试版本中,您可以使用类似

<configuration xmlns:xdt="...">
    <connectionStrings>
      <add name="MyConnectionString" connectionString="debugstring"
         providerName="debugprovider" />
     </connectionStrings>
</configuration>


如果您有多个连接字符串,则所选答案将不起作用。在发布配置中,为所有连接字符串添加以下标记

xdt:Transform=“SetAttributes”xdt:Locator=“匹配(名称)”

这是我的Web配置文件中的内容

在Web.Debug.Config中

<add name="MyConnectionString" 
    connectionString="Data Source=dev;Initial Catalog=DevDB;Integrated Security=True;
    providerName="System.Data.SqlClient"/>

我不确定我是否遵循了。如果在连接字符串级别上有替换转换标记,那么它将完全替换有问题的单个连接字符串。但如果将其移动到该级别,则会清除所有连接字符串。
<configuration xmlns:xdt="...">
    <connectionStrings>
      <add name="MyConnectionString" connectionString="newstring"
         providerName="newprovider"
         xdt:Transform="Replace" />
     </connectionStrings>
</configuration>
<add name="MyConnectionString" 
    connectionString="Data Source=dev;Initial Catalog=DevDB;Integrated Security=True;
    providerName="System.Data.SqlClient"/>
<add name="MyConnectionString" 
    connectionString="Data Source=LIVESERVER;Initial Catalog=DB98;Integrated Security=True;
    providerName="System.Data.SqlClient" 
    xdt:Transform="SetAttributes" 
    xdt:Locator="Match(name)"/>