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

我有一个.NET 3.5 Web应用程序,我最近添加了一些Linq to Sql功能 - 一个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 virtualPath,Type requiredBaseType,HttpContext context,Boolean allowCrossApp,Boolean noAssert)+119    System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context,String requestType,VirtualPath virtualPath,String physicalPath)+33    System.Web.UI.PageHandlerFactory.System.Web.IHttpHandlerFactory2.GetHandler(HttpContext context,String requestType,VirtualPath virtualPath,String physicalPath)+40    System.Web.HttpApplication.MapHttpHandler(HttpContext context,String requestType,VirtualPath path,String pathTranslated,Boolean useAppConfig)+160    System.Web.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+93    System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously)+155 DB_Interface.SarcStateDataDB是我编写的一个类,它调用上下文对象的构造函数: codeCS.SarcStateDataDataContext context = new SarcStateDataDataContext(); 我不发送连接字符串或连接对象,因为程序的本地和部署版本都使用相同的远程数据库。但这可能是问题吗?本地应用程序可以访问dbml文件中的连接字符串,但部署的应用程序没有... 更新:我查看了Reflector中的代码,它从web.config获取连接字符串,并且所有内容看起来都很复杂......     
已邀请:
好的,我发现了问题!它正在寻找的连接字符串名称 - SarcWritingConnectionString - 显然是Linq to Sql在我最初设置它时通过向导添加到web.config。当我部署项目时,我没有将新的web.config提升到服务器,因为我认为它没有改变。当我向上移动时,一切正常! (我使用了我已在服务器资源管理器中设置的数据连接,而不是已经在web.config中的连接字符串 - 我甚至不知道该怎么做。) 感谢您的帮助 - 我很高兴知道我不需要提升dbml文件。下次会更容易!     
嗨辛西娅 您不需要部署.dbml文件。空引用异常不是由缺少.dbml引起的。很难用提供的信息来猜测问题,但首先检查生产和开发数据库上的数据是否相同。也许生产数据库缺少一些记录,你从那里得到无引用。还要确保使用VS发布向导部署项目(右键单击项目 - >发布)。此外,如果这没有帮助,你可以发布异常的堆栈跟踪吗? 谢谢     
我建议您在实例化类时传递要使用的连接字符串,然后在其
codeCS.SarcStateDataDataContext context = new SarcStateDataDataContext();
中使用它。 然后,您可以在应用程序级别管理连接字符串,可能在您的web.config文件中。这样,如果您切换到使用与prod分开的dev db,则可以轻松转换为单独的连接字符串。     

要回复问题请先登录注册