Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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
Asp.net mvc 实体类型ApplicationUser不是当前上下文模型的一部分。在项目开始时使用了两个不同的数据库_Asp.net Mvc_Entity Framework_Asp.net Mvc 4_Entity Framework 6_Azure Web App Service - Fatal编程技术网

Asp.net mvc 实体类型ApplicationUser不是当前上下文模型的一部分。在项目开始时使用了两个不同的数据库

Asp.net mvc 实体类型ApplicationUser不是当前上下文模型的一部分。在项目开始时使用了两个不同的数据库,asp.net-mvc,entity-framework,asp.net-mvc-4,entity-framework-6,azure-web-app-service,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,Entity Framework 6,Azure Web App Service,我已经创建了一个MVC4应用程序,它使用EntityFramework将数据读写到我托管在Azure数据库上的数据库中。Azure数据库应该保存应用程序数据和应用程序的登录数据 然而,当我第一次创建应用程序时,我忘记删除本地机器的连接字符串。因此,我创建了一个应用程序,它在两个不同的位置使用两个不同的数据库。一个数据库用于应用程序数据(Azure),另一个数据库用于登录数据(本地) 因为我想将此应用程序发布到Azure,所以我想使用Azure数据库获取应用程序和登录信息,并完全排除本地计算机的数

我已经创建了一个MVC4应用程序,它使用EntityFramework将数据读写到我托管在Azure数据库上的数据库中。Azure数据库应该保存应用程序数据和应用程序的登录数据

然而,当我第一次创建应用程序时,我忘记删除本地机器的连接字符串。因此,我创建了一个应用程序,它在两个不同的位置使用两个不同的数据库。一个数据库用于应用程序数据(Azure),另一个数据库用于登录数据(本地)

因为我想将此应用程序发布到Azure,所以我想使用Azure数据库获取应用程序和登录信息,并完全排除本地计算机的数据库

我首先从应用程序的web.config文件中删除本地数据库的连接字符串,以此启动此过程

然后,我在IdentityModels.cs中更改了ApplicationDBContext类以反映以下更改

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("AbacusEntities", throwIfV1Schema: false)
    {
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}
另外,请参阅下面web.config中的连接字符串。当然,所有敏感信息都已被删除

add name="AbacusEntities" connectionString="metadata=res://*/Models.AbacusModel.csdl|res://*/Models.AbacusModel.ssdl|res://*/Models.AbacusModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source={Azure server};initial catalog={database name};user id={Database User};password={Password};MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" 
我已经浏览了很多帖子,但找不到任何有用的信息。我一直在想,下一步是将我为用户帐户创建的表从本地数据库迁移到Azure数据库,但我不完全相信这会奏效

我更愿意在Azure数据库中生成这些表,并使用VisualStudio将其用于身份验证

起初,当使用两个不同的数据库登录时,登录过程工作得很好,但现在我需要获取在Azure中生成的登录数据表

非常感谢您的帮助,如果您需要任何其他信息,请告诉我

评论更新:

类ApplicationUser在IdentityModel.cs文件中定义。下面是课堂

public class ApplicationUser : IdentityUser
{
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here
        return userIdentity;
    }
}
公共类应用程序用户:IdentityUser
{
公共异步任务GenerateUserIdentityAsync(用户管理器)
{
//注意authenticationType必须与CookieAuthenticationOptions.authenticationType中定义的类型匹配
var userIdentity=wait manager.CreateIdentityAsync(这是DefaultAuthenticationTypes.ApplicationOkie);
//在此处添加自定义用户声明
返回用户身份;
}
}

我已尝试按照以下步骤重现您的问题:

1) 创建Asp.net MVC模板,然后注册新用户

结果:我们可以在本地数据库中找到用户信息

2) 使用实体框架添加带有视图的控制器。并使用Azure SQL数据库作为其资源

结果:我们将在web.config中找到两个连接

3) 删除默认连接字符串

4) 更改应用程序数据库上下文连接字符串

解决方案

1) 编辑“DefaultConnection”连接字符串



使用数据库名称,而不是传递连接字符串。在我的示例中检查数据库名称
TestDB

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("TestDB", throwIfV1Schema: false)
        {
        }

        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext();
        }
    }
public类ApplicationDbContext:IdentityDbContext
{
公共应用程序上下文()
:base(“TestDB”,throwifvv1schema:false)
{
}
公共静态应用程序上下文创建()
{
返回新的ApplicationDbContext();
}
}

哪里定义了
应用程序用户
?这完全正确。昨天我自己找到了这个解决方案,但忘了把答案贴出来。不过,我会把你的答案标记为解决方案。我感谢你的帮助!非常感谢。我从正在迁移到Azure的遗留WebForms应用程序中得到了类似的结果。你能准确地解释需要什么吗?我看到你添加了一个connectionstring,但是为什么?答案很好,但是迁移文件夹在哪里?这仍然是一件事吗?
public class ApplicationUser : IdentityUser
{
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here
        return userIdentity;
    }
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("TestDB", throwIfV1Schema: false)
        {
        }

        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext();
        }
    }