繁体   English   中英

如何使用Linq to Sql组件部署ASP.NET网站

[英]How to deploy an ASP.NET website with a Linq to Sql component

我有一个.NET 3.5 Web应用程序,最近我在Sql功能中添加了Linq到-dbml文件等。在本地,它可以正常工作。

但是,当我尝试部署它时,我得到了一个空引用异常,显然是在它试图为上下文对象调用构造函数时。

为了增加复杂性,我使用了一个Web部署项目,该项目将其编译为单个DLL。 我以为Linq to Sql的东西会和其他所有东西一起编译。 但是,现在我想我需要将dbml文件和DLL一起移动。

我在App_Code目录中有dbml文件,因此我尝试在远程服务器上重新创建该目录结构。 但是.NET不允许我在预编译的应用程序上拥有App_Code目录。 因此,我只是将dbml文件移到了根目录中-但我仍然收到错误消息。

救命!

这是我得到的错误的堆栈跟踪:

[NullReferenceException:对象引用未设置为对象的实例。] codeCS.SarcStateDataDataContext..ctor()+28 DB_Interface.SarcStateDataDB..ctor()+26 eSARC_Basic..ctor()+56 ASP.esarc_basic_aspx..ctor( )+14 __ASP.FastObjectFactory_sarcwriting.Create_ASP_esarc_basic_aspx()+20 System.Web.Compilation.BuildResultCompiledType.CreateInstance()+32 System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath虚拟路径,requiredBaseType类型,HttpContext上下文,布尔值noCrossAppert, +119 System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext上下文,字符串requestType,VirtualPath virtualPath,字符串PhysicalPath)+33 System.Web.UI.PageHandlerFactory.System.Web.IHttpHandlerFactory2.GetHandler(HttpContext上下文,String requestType,VirtualPath virtualPath ,字符串PhysicalPath)+40 System.Web.HttpApplication.MapHttpHandler(HttpContext上下文,字符串requestType,虚拟路径,字符串pathTranslated,布尔useAppConfig)+160 System.Web.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+93 System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔值且已完成)+155

DB_Interface.SarcStateDataDB是我编写的一个类,它调用上下文对象的构造函数:

codeCS.SarcStateDataDataContext context = new SarcStateDataDataContext();

我不向其发送连接字符串或连接对象,因为该程序的本地版本和部署版本都使用相同的远程数据库。 但这可能是问题吗? 本地应用程序可以访问dbml文件中的连接字符串,但是部署的应用程序没有权限... ??

更新:我看了看Reflector中的代码,它正在从web.config获取连接字符串,并且在该问题上,一切看起来都很陈旧...

好的,我发现了问题! 它要查找的连接字符串名称-SarcWritingConnectionString-显然是在我最初通过向导进行设置时,Linq to Sql已添加到web.config中的名称。 部署项目时,我没有将新的web.config移到服务器上,因为我认为它没有改变。 当我向上移动时,一切正常!

(我使用了已经在服务器资源管理器中建立的数据连接,而不是web.config中已经存在的连接字符串-我什至不知道该怎么做。)

感谢您的帮助-很高兴知道我不需要上移dbml文件。 下次会更轻松!

您好,Cynthia,您不需要部署.dbml文件。 空引用异常不是由缺少.dbml引起的。 很难用提供的信息来猜测问题,但是首先要检查生产和开发数据库上的数据是否相同。 也许生产数据库缺少一些记录,并且您从那里得到nullreference。 还要确保使用VS Publishing Wizard部署项目(右键单击项目-> Publish)。 另外,如果这没有帮助,您可以发布异常的堆栈跟踪信息吗? 谢谢

我建议您向DB_Interface.SarcStateDataDB传递要在实例化该类时使用的连接字符串,然后在其codeCS.SarcStateDataDataContext context = new SarcStateDataDataContext();使用它codeCS.SarcStateDataDataContext context = new SarcStateDataDataContext();

然后,您可以在应用程序级别(大概在web.config文件中)管理连接字符串。 这样,如果您切换到使用与产品分开的dev db,则可以轻松过渡到单独的连接字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM