将MyDbContext合并到Asp.net IdentityDbContext

时间:2014-09-30 09:15:56

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

我在网上看到了很多例子,但是没有一个我可以自上而下地使用我自己的DbContext与Asp.net IdentityDbContext合并。

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

提前Thanx:)

3 个答案:

答案 0 :(得分:1)

如果我说得对,那么您正在尝试使用现有的数据库,表和现有用户使用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

希望这有帮助。

答案 1 :(得分:0)

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

ASP.NET Identity DbContext confusion

答案 2 :(得分:0)

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

首先创建一个新的ASP.NET MVC项目。如果您希望包含的代码匹配,请将其称为“联系人”。身份验证默认为单个用户帐户,这是我们在这种情况下所需的。现在取消选择云中的主机。您可以稍后输入发布设置。创建项目后,启动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。另外,我不想使用生成的&#34; DefaultConnection&#34;这是在Web.config中创建的,因此我传递了&#34; ContactContext&#34;作为基础构造函数的连接字符串名称。我们将在一分钟内修改连接字符串。如果您要在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替换它。你应该能够做一个干净的构建。