EF Code First似乎正在崩溃工人流程

时间:2013-03-07 12:15:02

标签: c# ef-code-first

我使用EF Code First在开发阶段初始创建我的数据库。当我将项目移动到服务器上的暂存环境时,我包含了一个小的hack,以避免在特定阶段更改或删除数据库。 (因此它将连接到现有数据库)。我现在已经制作了一个项目的简单副本,并且我试图将它托管在服务器上的另一个位置,以便同时运行一个暂存和实时版本,但使用两个不同的数据库,我认为这些数据库可以在web.config中设置。当我从一个位置运行它时它可以工作但在另一个位置我的应用程序池失败

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 Integerated。

修改 如果我将数据库名称更新为与原始数据库名称完全相同,那么它可以正常工作。我该怎么做才能解决这个问题?

1 个答案:

答案 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字段的配置必须以某种方式不正确。如果出现错误,我会写入Error表,从而导致SO和工作进程崩溃。

由于某种原因,我配置了SQL的方式,我无法对数据库进行简单的还原,因此我只是删除了数据库,并通过编写对象脚本并重新配置必要的表来重新创建它。

经验教训:如果一个工作进程崩溃,那么就有充分的理由,在这种情况下,StackOverflow非常有意义!