我在网上看到了很多例子,但是没有一个我可以自上而下地使用我自己的DbContext与Asp.net IdentityDbContext合并。
有人可以带我走过吗?我在第0步,我想要的是将ASP.net IdentityDbContext生成的表放在我自己的数据库中,这样我就可以在我自己的数据库中保留用户数据。我怎样才能做到这一点?
提前Thanx:)
答案 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)
我不确定你想要达到的目的,但请查看这个问题,看看它是否有任何帮助。
答案 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替换它。你应该能够做一个干净的构建。