2013-03-07 43 views
1

我使用EF代碼優先在開發階段最初創建我的數據庫。當我將項目移動到服務器上的臨時環境時,我包括一個小小的竅門,以避免在特定階段更改或刪除數據庫。 (因此它會連接到一個現有的數據庫)。我現在已經做了一個項目的簡單副本,並試圖將其託管在服務器上的另一個位置,以便同時運行一個臨時和實時版本,但使用兩個不同的數據庫,我假設可以在web.config中進行設置。當我從一個位置運行它,它的工作原理,但在其他位置我的應用程序池失敗EF代碼第一次似乎是崩潰工作進程

A process serving application pool 'XYZ' suffered a fatal communication error with the Windows Process Activation Service. The process id was '1234'. The data field contains the error number. 

Faulting application name: w3wp.exe, version: 7.5.7601.17514, time stamp: 0x4ce7a5f8 
Faulting module name: ntdll.dll, version: 6.1.7601.17725, time stamp: 0x4ec49b8f 
Exception code: 0xc00000fd 
Fault offset: 0x0002e04e 
Faulting process id: 0x1d98 
Faulting application start time: 0x01ce1b29dcf57530 
Faulting application path: C:\Windows\SysWOW64\inetsrv\w3wp.exe 
Faulting module path: C:\Windows\SysWOW64\ntdll.dll 
Report Id: 1fd4a0b0-871d-11e2-a272-be31a5415ec8 

任何意見或建議?關於代碼

詳情:

的Global.asax - 的Application_Start

if (DAL.General.Helpers.Phase == "Live") { 
    Database.SetInitializer<MyContext>(new MyContextProductionInitialiser()); 
} else { 
    Database.SetInitializer(new MyContextInitialiser()); 
} 

MyContextProductionInitialiser

public class MyContextProductionInitialiser : IDatabaseInitializer<MyContext> 
{ 
    public void InitializeDatabase(MyContext context) 
    { 
     if (!context.Database.Exists()) 
     { 
      throw new System.Configuration.ConfigurationErrorsException("Database does not exist"); 
     } 
    } 
} 

MyContextInitialiser

public class MyContextInitialiser : DropCreateDatabaseIfModelChanges<MyContext> {...} 

MyContext

public MyContext() : base("name=MyContextConnectionString") { 
    Database.Initialize(false); 
} 

** **的Web.config

<connectionStrings> 
    <add name="MyContextConnectionString" connectionString="Server=.;Database=database_staging;User Id=sa;Password=password;" providerName="System.Data.SqlClient " /> 
</connectionStrings> 

數據庫:我使用的是共享SQL登錄用戶的升級和現場數據庫。

應用程序池:在IIS 7.5中有兩個獨立但相同的應用程序池。他們都是v4.0整合。

編輯 如果我更新的數據庫名是完全一樣的原始數據庫名稱,然後它的作品。我能做些什麼來解決這個問題?

回答

0

由於堆棧溢出,工作進程崩潰。我仍在調查,但在寫入數據庫時​​,引發以下異常:Cannot insert the value NULL into column 'ID', table 'XYZ'; column does not allow nulls. INSERT fails.\r\nThe statement has been terminated.新數據庫的IDENTITY字段的配置必須以某種方式錯誤。發生錯誤時,我寫入錯誤表,從而導致SO和工作進程崩潰。

由於配置SQL的方式,我無法對數據庫進行簡單恢復,因此我簡單地刪除了數據庫,然後通過腳本化對象並重新配置必要的表來重新創建數據庫。

獲得的經驗教訓:如果工作進程崩潰,這裏有一個很好的理由,在這種情況下,StackOverflow非常合理!