将MyDbContext合并到Asp.net IdentityDbContext

本文关键字:net IdentityDbContext Asp MyDbContext 合并 | 更新日期: 2023-09-27 18:25:06

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

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

提前Thanx:)

将MyDbContext合并到Asp.net IdentityDbContext

如果我没有弄错,那么您正在尝试使用asp.net身份框架来使用现有的数据库、表和现有用户。

首先,根据我的理解,你不能将你的数据库上下文(MyDbContext)与"IdentityDbContext"合并,因为asp.net身份框架表的上下文必须从IdentityDbContext<YourUserTable>继承。但是您的其他表可能继承自DbContext

因此,如果你想使用身份框架内建方法支持,你必须使用两个独立的数据库上下文,即UserManager等

您可以使用带有标识框架的现有数据库,只需要使用模型绑定将数据库表与标识框架EF代码优先方法正确绑定即可。

有一个YouTube视频教程,可以帮助你获得一些想法,以实现你的任务。实际上,这个视频演示了如何在现有数据库中使用Identity 2.0。

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

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

希望这能有所帮助。

我真的不确定你想要实现什么,但请检查这个问题,看看它是否有帮助。

ASP.NET标识DbContext混淆

下面是我创建的演练的一部分。其中包含了一些特定于代码优先迁移的步骤,但您应该能够使用这些步骤完成您想要的任务。

首先创建一个新的ASP.NET MVC项目。如果您希望包含的代码匹配,请将其称为"联系人"。身份验证默认为"个人用户帐户",这正是我们在本例中想要的。暂时取消选择云中的主机。您可以稍后输入发布设置。创建项目后,打开Package Manager控制台并安装Package EntityFramework。现在,由于我们正在执行"代码优先",添加一个简单的模型类。

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应该将调用添加到基。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替换它。您应该能够进行干净的构建。