对Identity和其他数据库实体使用相同的dbContext

时间:2013-11-15 13:47:23

标签: c# entity-framework visual-studio-2013 asp.net-mvc-5 asp.net-identity

我有一个使用EntityFramework edmx模型的应用程序,我希望能够为我的Identity类和实体类使用相同的dbContext。有人提出Similar Query,但我无法让它们兼容。

我已经改变了EF上下文类中的类定义,如下所示

    public partial class MyDbContext : IdentityDbContext<AspNetUser>
    {
    }

我的身份用户为

public partial class AspNetUser : IdentityUser
{
}

但是当我尝试登录或注册

时出现错误
  

实体类型AspNetUser不是当前模型的一部分   上下文

2 个答案:

答案 0 :(得分:3)

我最近提出的解决方案是对ASP.NET身份数据和业务实体使用单个上下文:

public class DatabaseContext : IdentityDbContext<UserInfo>
{
    public virtual DbSet<Comment> Comments { get; set; } // Your business entities

    public DatabaseContext()
    : base("name=DatabaseContext")
     {
     }
}

请注意,DatabaseContext继承自IdentityDbContext。

这种方法有一些权衡:例如,您的数据访问层应引用Microsoft.AspNet.Identity.Core和Microsoft.AspNet.Identity.EntityFramework;但是,如果使用依赖项注入或实体框架迁移,则在项目中使用单个数据库上下文会使事情变得更加容易。

答案 1 :(得分:2)

由于身份如何工作的异步性质,我建议使用这些dbContext。您希望绝对控制应用程序上下文。

出于这个原因,我通常使用来自应用程序上下文的相同连接注入标识dbContext,但是有两个单独的实例。

此外,如果你想让你的应用程序dbContext不是代码而不是代码,那么将无法与标识dbContext合并。