Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC 4实体框架无法从IIS服务器连接到动态创建的数据库_C#_Asp.net Mvc_Entity Framework_Asp.net Mvc 4_Iis - Fatal编程技术网

C# MVC 4实体框架无法从IIS服务器连接到动态创建的数据库

C# MVC 4实体框架无法从IIS服务器连接到动态创建的数据库,c#,asp.net-mvc,entity-framework,asp.net-mvc-4,iis,C#,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,Iis,当我在本地主机IIS中托管我的应用程序后,系统突然出现错误: 无法打开登录请求的数据库“AlvinCMS”。登录 失败。用户“NT AUTHORITY\SYSTEM”登录失败 数据库AlvinCMS是在运行时创建的。在调试模式下,系统没有问题 这是我的global.asax: public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() {

当我在本地主机IIS中托管我的应用程序后,系统突然出现错误:

无法打开登录请求的数据库“AlvinCMS”。登录 失败。用户“NT AUTHORITY\SYSTEM”登录失败

数据库AlvinCMS是在运行时创建的。在调试模式下,系统没有问题

这是我的global.asax:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        //Check And Init Database
        Alvin_CMS.App_Start.DatabaseConfig.Initialize();
        ......
这是我的初始化:

public static void Initialize()
{
    Alvin_CMS.Models.AlvinCMSMigrationDBContext migrationDB = new Models.AlvinCMSMigrationDBContext();
    try
    {
        if (!migrationDB.Database.Exists())
        {
            migrationDB.Database.Initialize(false); //THIS CREATES DATABASE
            AlvinCMSExtension.Models.AccountDBContext accountDB = new AlvinCMSExtension.Models.AccountDBContext();
            accountDB.Database.Initialize(false);
            SetDefaultValue(migrationDB);
        }
        migrationDB.Database.Initialize(false);
    }
    catch (Exception e)
    {
        migrationDB.Database.Delete();
        AlvinCMSExtension.Helper.Log(e);
    }
}
以下是我的背景:

public AlvinCMSMigrationDBContext()
        : base("DefaultConnection")
{
    Database.SetInitializer<AlvinCMSMigrationDBContext>(new CreateDatabaseIfNotExists<AlvinCMSMigrationDBContext>());
}
public alvincmmigrationdbcontext()
:base(“默认连接”)
{
SetInitializer(新的CreateDatabaseIfNotExists());
}
我将应用程序池设置为使用
LocalSystem
,并且我的连接字符串中有
IntegratedSecurity=true
。如何修复此错误

注意:如果我在VisualStudioDevelopmentServer上运行此程序,它运行正常,没有错误。另外,如果我使用localDB并在IIS Express上运行它,它也可以正常运行。只有在使用IIS时才存在此问题,即使在从Visual Studio本地IIS Web服务器调试程序时,也会产生错误


更新 经过4个小时的调试,我终于知道出了什么问题。错误存在,因为数据库不存在。我有另一个数据库错误,导致代码输入Exception,因此没有创建数据库

有问题的数据库具有以下连接字符串:

数据源=。\SQLEXPRESS;AttachDbFilename=“C:\Users\Public\Documents\Projects\Alvin CMS Project\Alvin CMS\Alvin CMS\App\u Data\db\backup\AlvinCMS\u Default.mdf”;初始目录=AlvinCMS\u默认值;综合安全=真实;MultipleActiveResultSets=True

当托管在IIS上时,程序无法连接数据库。它会导致以下错误:

{“无法打开物理文件\”C:\Users\Public\Documents\Projects\Alvin CMS Project\Alvin CMS\App\u Data\db\backup\AlvinCMS\u Default.mdf\”。操作系统错误5:\“5(访问被拒绝。)\“\r\n无法将文件'C:\Users\Public\Documents\Projects\Alvin CMS Project\Alvin CMS\App\u Data\db\backup\AlvinCMS\u Default.mdf'附加为数据库'AlvinCMS\u Default'。”


但是,当我使用visual development server时,它工作得很好。因此出现了一个新问题:当托管在IIS服务器上时,如何安全地附加数据库而不导致错误?

您可以检查以下事项:

  • 在您的
    Web.Config中添加
    integratedsecurity=SSPI

  • 允许
    NT权限/系统
    以系统管理员的身份访问服务器角色

    转到安全>登录>选择
    NT AUTHORITY\SYSTEM

  • 为其提供应用程序所需的必要权限


    正如上面更新的问题所述,实际上数据库连接从未出现任何问题。实际发生的情况是,当我尝试访问另一个数据库时,访问被拒绝,这使得代码输入了异常,并且从未接触数据库创建。这就是我无法登录访问数据库的原因,bec因为数据库从未创建过

    然后我需要修复导致故障的另一个数据库。问题是我无法连接该数据库。访问一直被拒绝。在我做了一些研究**之后,我发现我在使用SQLEXPRESS之前使用了LocalDB。我从LocalDB中删除了该数据库,但显然LocalDB仍在引用该数据库,这就是为什么我的访问被拒绝,因为LocalDB仍在使用该数据库。因此,我所做的是运行:

    sqllocaldb.exe从cmd停止v11.0
    (您也可以从visual studio中的命令行运行它)


    然后,我终于可以毫无问题地连接我的数据库。

    允许NT权限/系统到服务器角色作为系统管理员。IIS中启用了什么身份验证?我确实将NT权限/系统更改为系统管理员,但错误仍然没有纠正。IIS的身份验证为
    本地系统
    ,这将使用NT权限/系统进行身份验证访问数据库对吗?@AlvinStefanus在问题中添加您的连接字符串。我已经更新了问题,显然有另一个数据库导致代码进入异常,这就是为什么无法访问AlvinCMS数据库,因为它不存在。我已经将NT权限/系统分配为sysadmin。我尝试nge IntegratedSecurity=SSPI。但错误仍然相同。
    无法打开登录请求的数据库“AlvinCMS”。登录失败。用户“NT AUTHORITY\SYSTEM”登录失败。