【问题标题】:Merge MyDbContext to Asp.net IdentityDbContext将 MyDbContext 合并到 Asp.net IdentityDbContext
【发布时间】:2014-11-24 20:35:07
【问题描述】:

我在网上看到了很多示例,但没有一个可以从上到下使用关于将我自己的 DbContext 与 Asp.net IdentityDbContext 合并。

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

提前感谢:)

【问题讨论】:

标签: c# asp.net entity-framework asp.net-identity


【解决方案1】:

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

首先创建一个新的 ASP.NET MVC 项目。如果您希望包含的代码匹配,则将其称为联系人。身份验证默认为个人用户帐户,这是我们在这种情况下想要的。暂时取消选择云中的主机。您可以稍后输入您的发布设置。创建项目后,打开 Package Manager Console 和 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 的调用,但如果不确定,请确保添加它,因为它对于构建标识表至关重要。尽管不是必需的,但您可以将模型构建器配置为不使用复数表名。添加身份代码使用此上下文所需的 Create 方法。此外,当您添加代码时,您需要右键单击并 Resolve 以添加适当的 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。您应该能够进行干净的构建。

【讨论】:

    【解决方案2】:

    我不太确定您要达到什么目标,但请检查此问题以查看是否有任何帮助。

    ASP.NET Identity DbContext confusion

    【讨论】:

      【解决方案3】:

      如果我没听错,您正在尝试将现有数据库、表和现有用户与 asp.net 身份框架一起使用。

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

      因此,如果您想在方法支持中使用身份框架构建,您必须使用两个单独的数据库上下文,即 UserManager 等。

      您可以将现有数据库与身份框架一起使用,您只需使用模型绑定将您的数据库表与身份框架 EF 代码优先方法正确绑定。

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

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

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

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2013-11-14
        • 1970-01-01
        • 2018-07-07
        • 2020-01-25
        • 1970-01-01
        • 2016-09-27
        • 2015-06-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多