合并MyDbContext到Asp.net IdentityDbContext。
问题出现的原因:在ASP.NET MVC项目中使用Identity框架时,想要将自定义的DbContext(ContactContext)与IdentityDbContext(ApplicationDbContext)合并,以便在一个上下文中管理应用程序数据和身份认证数据。
解决方法:
1. 创建一个新的ASP.NET MVC项目,选择"Individual User Accounts"作为身份认证选项。
2. 在Models命名空间下创建Contact类作为简单的模型类。
public class Contact { public int ContactID { get; set; } public string Name { get; set; } public string Phone { get; set; } }
3. 在Models命名空间下创建ContactContext类作为数据库上下文,继承自IdentityDbContext。
public class ContactContext : IdentityDbContext { public ContactContext() : base("ContactContext") { } public DbSetContacts { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Conventions.Remove (); } public static ContactContext Create() { return new ContactContext(); } }
4. 在Web.config文件中更新数据库连接字符串,将name属性修改为"ContactContext",并修改AttachDbFilename和Initial Catalog的值为更易理解的名称。
5. 打开IdentityModels.cs文件,将ApplicationUser类从文件中剪切并粘贴到Contact.cs文件中,并解决缺少的命名空间引用。
6. 在整个项目中查找并替换ApplicationDbContext为ContactContext。
7. 进行清理构建,以确保代码没有错误。
问题的出现原因是无法将现有的数据库上下文(MyDbContext)与IdentityDbContext合并,因为asp.net身份框架表的上下文必须继承自IdentityDbContext<YourUserTable>
,而其他表可能继承自DbContext
。因此,如果要使用身份框架内置的方法支持(如UserManager等),则必须使用两个单独的数据库上下文。
解决方法是使用现有的数据库与身份框架结合使用,只需使用模型绑定正确地将数据库表与身份框架EF代码优先方法绑定即可。有一个YouTube视频教程可以帮助您了解如何实现此任务。实际上,这个视频演示了如何在现有数据库中使用Identity 2.0。
希望这可以帮助到您。
以下是视频链接: