2013-03-07 75 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非常合理!