首页 文章

将MyDbContext合并到Asp.net IdentityDbContext

提问于
浏览
2

我在网上看到了很多例子,但是我从头到尾都没有关于将我自己的DbContext与Asp.net IdentityDbContext合并的问题 .

有人可以带我走过吗?我在第0步,我想要的是将ASP.net IdentityDbContext生成的表放在我自己的数据库中,这样我就可以在我自己的数据库中保留用户数据 . 我怎样才能做到这一点?

提前Thanx :)

3 回答

  • 0

    如果我说得对,那么您正在尝试使用现有的数据库,表和现有用户使用asp.net身份框架 .

    首先,根据我的理解,你可以't merge your db context (MyDbContext) with ' IdentityDbContext',因为asp.net身份框架表的上下文必须从 IdentityDbContext<YourUserTable> 继承 . 但是您的其他表可能继承自 DbContext .

    因此,如果要在方法支持(即UserManager等)中使用标识框架构建,则必须使用两个单独的db上下文 .

    您可以使用现有数据库与身份框架,您只需要使用模型绑定正确绑定您的数据库表与身份框架EF代码的第一种方法 .

    有一个YouTube视频教程可以帮助您获得一些想法,以实现您的任务 . 实际上,这个视频说明了将Identity 2.0与现有数据库一起使用 .

    第1部分:https://www.youtube.com/watch?v=elfqejow5hM

    第2部分:https://www.youtube.com/watch?v=JbSqi3Amatw

    希望这可以帮助 .

  • 1

    我不太确定你想要达到的目的,但请查看这个问题,看看它是否有任何帮助 .

    ASP.NET Identity DbContext confusion

  • 0

    这是我创建的演练的一部分 . 有一些步骤特定于使其与代码优先迁移一起工作,但您应该能够使用这些步骤完成您想要的任务 .

    首先创建一个新的ASP.NET MVC项目 . 如果您希望包含的代码匹配,请将其称为“联系人” . 身份验证默认为单个用户帐户,这是我们在这种情况下所需的 . 现在取消选择 Cloud 中的主机 . 您可以稍后输入发布设置 . 创建项目后,启动Package Manager控制台和Install-Package EntityFramework . 现在,因为我们正在做Code First添加一个简单的模型类 .

    public class Contact {
        public int ContactID { get; set; }
        public string Name { get; set; }
        public string Phone { get; set; }
    }
    

    此时你通常会添加控制器等,但由于这篇文章专注于数据方面的事情,我们将跳过所有这些 . 接下来我们要添加我们的数据库上下文 . 继续并在Models命名空间中添加它 .

    public class ContactContext : IdentityDbContext {
        public ContactContext()
            : base("ContactContext") {
        }
    
        public DbSet<Contact> Contacts { get; set; }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder) {
            base.OnModelCreating(modelBuilder);
    
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }
    
        public static ContactContext Create() {
            return new ContactContext();
        }
    }
    

    这里有几点需要注意 . 由于我们将Identity表合并到应用程序的上下文中,因此我们希望继承IdentityDbContext而不仅仅是DbContext . 此外,我不想使用在Web.config中创建的生成的“DefaultConnection”,因此我将“ContactContext”作为连接字符串名称传递给基础构造函数 . 我们将在一分钟内修改连接字符串 . 如果您正在键入OnModelCreating方法,Visual Studio应该添加对base.OnModelCreating的调用,但如果不是,请确保添加它,因为它对于构建标识表至关重要 . 虽然不是必需的,但您可以将modelBuilder配置为不使表名复数化 . 添加身份代码使用此上下文所需的Create方法 . 此外,在添加代码时,您需要右键单击并解决以添加适当的using语句 .

    正如所承诺的,这里是要在站点根目录中的web.config中更新的已修改连接字符串 . name属性更改为对应用程序有意义的内容,AttachDbFilename和Initial Catalog值更改为比自动生成的名称更友好的用户名 .

    <add name="ContactContext" connectionString="Data Source=
    (LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\ContactContext.mdf;Initial
    Catalog=ContactContext;Integrated Security=True" 
    providerName="System.Data.SqlClient" />
    

    现在转到Models文件夹并打开IdentityModels.cs文件 . 从此处剪切ApplicationUser类并将其粘贴到Contact.cs文件中 . 同样,您必须解决一些缺少的命名空间 . 此时,您可以安全地删除IdentityModels.cs文件 . 由于我们已经删除了ApplicationDbContext,我们需要在ApplicationDbContext上进行查找,并在几个地方用ContactContext替换它 . 你应该能够做一个干净的构建 .

相关问题