所以我是一个相当新的MVC4和许多模式对我来说是新的。
然而,我很好奇的是关于发布/调试模式的最佳实践。对我来说,在实时模式和调试模式之间有很多不同之处,我希望所有这些都是自动的,所以我不需要更改任何内容来发布。
例如,我在repo(域名项目)中这样做公共类efaccountrerepository: iaccountrerepository{private EFDbContext _context
public EFAccountRepository()
{
#if DEBUG
_context = new EFDbContext("name=Debug");
#else
_context = new EFDbContext("name=Live");
#endif
}
在我的DI (web)
#if DEBUG
EFDbContext efcontext = new EFDbContext("name=Debug");
#else
EFDbContext efcontext = new EFDbContext("name=Live");
#endif
还是直接写
更聪明?EFDbContext efcontext = new EFDbContext("name=MyApp");
然后用web改变。配置转换MyApp是什么意思?
如果您有其他关于自动调试/发布的建议,我们也欢迎。
我强烈建议不要将连接字符串硬编码到代码中。请考虑将代码指向web。配置转换。你可以在那里添加连接字符串,根据代码的版本,可以应用适当的转换,这样你只需要在应用中使用下面的代码一次,就可以覆盖所有的环境。
ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString
在调试版本中,你可以使用类似于
的内容<configuration xmlns:xdt="...">
<connectionStrings>
<add name="MyConnectionString" connectionString="debugstring"
providerName="debugprovider" />
</connectionStrings>
</configuration>
在你的发布版本中,你可以告诉转换将旧字符串替换为
<configuration xmlns:xdt="...">
<connectionStrings>
<add name="MyConnectionString" connectionString="newstring"
providerName="newprovider"
xdt:Transform="Replace" />
</connectionStrings>
</configuration>
查看更多参考资料http://msdn.microsoft.com/en-us/library/dd465326.aspx
如果有多个连接字符串,所选答案将不起作用。在发布版中,为所有connectionstrings添加以下标签
xdt:变换="SetAttributes"xdt:定位器= "匹配(名字)"
这是我在Web配置文件中的内容
在Web.Debug.Config<add name="MyConnectionString"
connectionString="Data Source=dev;Initial Catalog=DevDB;Integrated Security=True;
providerName="System.Data.SqlClient"/>
和Web.Release.Config
<add name="MyConnectionString"
connectionString="Data Source=LIVESERVER;Initial Catalog=DB98;Integrated Security=True;
providerName="System.Data.SqlClient"
xdt:Transform="SetAttributes"
xdt:Locator="Match(name)"/>
使用web。配置转换http://msdn.microsoft.com/en-us/library/dd465326.aspx