2010-12-02 55 views
0

我有一個.NET 3.5 Web應用程序,我最近爲一個dbml文件添加了一些Linq to Sql功能等。在本地,它工作正常。如何使用Linq to Sql組件部署ASP.NET網站

但是,當我嘗試部署它時,我得到一個空引用異常,顯然當它試圖調用上下文對象的構造函數時。

爲了增加複雜性,我使用了一個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,HttpCont ext context,布爾allowCrossApp,布爾noAssert)+119 System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext上下文,字符串requestType,VirtualPath virtualPath,字符串physicalPath)+33 System.Web.UI.PageHandlerFactory.System.Web.IHttpHandlerFactory2 .GetHandler(HttpContext的上下文中,字符串的RequestType,virtualPath virtualPath,字符串physicalPath)40 System.Web.HttpApplication.MapHttpHandler(HttpContext的上下文中,字符串的RequestType,virtualPath路徑,字符串pathTranslated,布爾useAppConfig)160 System.Web.MapHandlerExecutionStep。 System.Web.HttpApplication.IExecutionStep.Execute()93 System.Web.HttpApplication.ExecuteStep(IExecutionStep步驟,布爾& completedSynchronously)155

DB_Interface.SarcStateDataDB是我寫的一個類,它調用上下文對象的構造函數:

codeCS.SarcStateDataDataContext context = new SarcStateDataDataContext();

我不給它發送連接字符串或連接對象,因爲程序的本地和部署版本都使用相同的遠程數據庫。但是,這可能是問題嗎?本地應用程序可以訪問dbml文件中的連接字符串,但部署的應用程序不會......?

更新:我看了一下在反射的代碼,它正從web.config中的連接字符串,並且一切看起來就這一問題copasetic ...

回答

1

嗨辛西婭 你並不需要部署.dbml文件。 null引用異常不是由缺少.dbml引起的。很難用所提供的信息來猜測問題,但首先檢查生產和開發數據庫上的數據是否相同。也許生產數據庫缺少一些記錄,並從那裏獲得null參考。另外請確保您使用VS發佈嚮導部署項目(右鍵單擊項目 - >發佈)。另外,如果這沒有幫助,你能發佈異常的堆棧跟蹤嗎? 謝謝

+0

THanks Davita - 我更新了我的帖子,提供了更多信息。由於開發和生產數據庫都是相同的,我不認爲這是問題。 – Cynthia 2010-12-02 18:14:31

1

我建議你通過DB_Interface.SarcStateDataDB連接字符串,當你實例化類,然後使用它的codeCS.SarcStateDataDataContext context = new SarcStateDataDataContext();

然後,您可以在應用程序級別管理連接字符串,大概是在您的web.config文件中。這樣,如果您切換到使用獨立於產品的開發數據庫,​​那麼您可以輕鬆轉換到單獨的連接字符串。

2

好的,我發現問題了!正在查找的連接字符串名稱 - SarcWritingConnectionString - 顯然是LINQ to Sql在初始設置時通過嚮導進行設置時添加到web.config中的。當我部署項目時,我沒有將新的web.config移動到服務器上,因爲我認爲它沒有改變。當我移動它時,一切正常!

(我用我已經建立了服務器資源管理器而不是已經在web.config中的連接字符串的數據連接 - 我當時甚至不知道該怎麼做)

謝謝爲你的幫助 - 知道我不需要移動dbml文件是很好的。下一次會更容易!