我有一个ASP.NET Web应用程序项目,通过实体框架连接到远程数据库.在调试期间(例如,在我的本地计算机上运行项目),数据库的IP地址与发布期间的IP地址不同(例如,在将项目上载到我的Web服务器并从浏览器运行之后).到目前为止,我总是手动更改Web.config文件中的数据库连接字符串以在两者之间切换(基本上我必须连接字符串,一个名为'Debug',一个'Release',我只是在部署时交换名称).
现在我只是注意到应该可以通过Web.config Transformation Syntax自动发生这种情况,你可以将修改后的连接字符串放在Web.Release.config版本中,然后在Release版本下构建DLL时应该使用它.
但它似乎对我不起作用......
这是我的常规Web.config文件的相关部分(其中包含用于本地使用的Debug连接字符串):
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<!-- Debug connection string. Release connection string is in Web.Release.config file -->
<add name="DatabaseEntities" connectionString="A" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
Run Code Online (Sandbox Code Playgroud)
这是Web.Release.config文件,如果DLL处于Release模式下,根据示例应将"DatabaseEntities"连接字符串"A"替换为"B":
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!-- Replace the DatabaseEntities connection string with the Release version (local IP address) -->
<connectionStrings>
<add name="DatabaseEntities"
connectionString="B"
xdt:Transform="Replace" xdt:Locator="Match(name)"/>
</connectionStrings>
</configuration>
Run Code Online (Sandbox Code Playgroud)
(显然"A"和"B"只是我真实连接字符串的占位符)
当我调试应用程序时(例如只按F5),使用默认的Web.config,我可以访问数据库.然后,我通过Configuration Manager将构建配置更改为Release.解决方案中的所有项目都设置为发布配置.然后我构建解决方案(仅通过Build或甚至通过完整的重建(例如Clean,Rebuild)).我将新构建的DLL上传到Web服务器,以及Web.config和Web.Release.config文件,当我尝试访问我无法访问的数据库时,它仍然试图通过调试IP地址访问数据库因此无法找到它......
似乎Web.Release.config文件被完全忽略,或者至少没有替换连接字符串.
我究竟做错了什么?转换语法错了吗?我没有正确地在发布模式下构建应用程序吗?
在.NET/SQLServer应用程序中管理调试和释放连接字符串的好方法是什么?
我有两个SQL Server,一个生产和一个构建/调试,我需要一种在部署ASP.NET应用程序时在两者之间切换的方法.
目前我只是将它们存储在web.config中并对其中一个进行注释,但是在部署时容易出错.
因此,我在开发中使用Entity Framework 5的项目已经进行了一段时间,因此决定将代码移至生产环境中。
我的问题是什么是这样做的好方法?
我最初的想法是在我的项目中有两个edmx文件,然后在开发环境中注释掉生产连接字符串,反之则在生产环境中注释掉。但是,这似乎不可行,因为在连接字符串中不能有两个具有相同名称的实体模型,从而导致在整个代码中更改模型“上下文”实例,这是没有意义的。
我想到的另一个想法是,修改开发数据库使用的模型的连接字符串以指向生产数据源(因为它们都具有相同的表结构)。但是我不知道我是否会在这里破坏任何东西。
我在这里查看了这篇文章,但并没有帮助:实体框架可同时用于生产和开发数据库
注意:我不是在使用代码优先模式,而是从数据库生成模型,并且开发和生产数据库都具有同步的数据库结构。
谢谢!
c# asp.net-mvc entity-framework connection-string web-config
我有一个 webApi 项目,在部署到开发环境后,我需要编辑 web.config 并将与数据库的连接从生产配置更改为开发配置,如果需要部署到生产配置,则返回。如何在我的项目中使用的发布或调试中为选定的开发或生产自动设置 webconfig?
我编写了一个自定义异常过滤器来记录我的应用程序异常,异常发生后我想将用户重定向到错误页面下面是我的代码
我的代码工作得很好,它捕获了异常,但在记录后它并没有将我扔到错误页面,你能帮忙吗
我的 CustomException Filer 类
public class CustomExceptionFilterAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
try
{
string requestBody = "", Action = "", Controller = "";
try
{
requestBody = filterContext.HttpContext.Request.Form.ToString();
Action = filterContext.RouteData.Values["action"].ToString();
Controller = filterContext.RouteData.Values["controller"].ToString();
}
catch (Exception)
{
}
StringBuilder sbHeader = new StringBuilder();
sbHeader.AppendLine(filterContext.RequestContext.HttpContext.Request.Headers.ToString());
StaticMethods.LogException(SessionHelper.LoginCode.ToString(), Action, Controller, filterContext.Exception.Message, filterContext.RequestContext.HttpContext.Request.RawUrl.ToString(), requestBody, sbHeader.ToString());
// This is which i am more concern about
filterContext.RouteData.Values.Add("Error", filterContext.Exception.Message);
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary(new { controller = "Error", …
Run Code Online (Sandbox Code Playgroud)