[英]Can I use the same dbcontext for asp identity
是否可以告诉ASP身份使用与应用程序dbcontext相同的dbcontext? 我的表需要与身份表相关。 每个表都有链接到身份表的createuser和edituser字段。 如果asp使用自己的dbcontext,那么我还必须向应用程序dbcontext添加实体和映射到身份表。 对于这种情况是否有更好的方法? 我先使用实体框架代码6,然后使用asp mvc 5。
编辑
根据以下答案,只要我的dbcontext从IdentityContext继承,我就可以使用相同的dbcontext。
我的问题:
我还需要手动创建实体类并映射吗? 我如何将表之间的关系映射到identityuser?
这是我当前的dbcontext
public partial class MyContext : DbContext
{
static MyContext()
{
Database.SetInitializer<MyContext>(null);
}
public MyContext()
: base("Name=MyContext")
{
this.Configuration.ProxyCreationEnabled = false;
this.Configuration.LazyLoadingEnabled = false;
}
public new DbSet<TEntity> Set<TEntity>() where TEntity : BaseEntity
{
return base.Set<TEntity>();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new AspNetRoleMap());
modelBuilder.Configurations.Add(new AspNetUserClaimMap());
modelBuilder.Configurations.Add(new AspNetUserLoginMap());
modelBuilder.Configurations.Add(new AspNetUserMap());
modelBuilder.Configurations.Add(new PersonMap());
}
您的上下文类必须继承自IdentityDbContext
而不是DbContext。 IdentityDbContext
包含一些用于IdentityUser, IdentityRole, IdentityUserLogin, IdentityUserRole, IdentityUserClaim
,并且具有IDbSet Users
和IDbSet Roles
。
public class MyContext : IdentityDbContext<IdentityUser or your own UserEntity>
{
.
.
.
}
当然
创建用户管理器的实例时,只需将用户存储区与自己的dbContext一起传递即可。
new UserManager<IdentityUser>(new UserStore<IdentityUser>(new MyDbContext()))
我的问题:
我还需要手动创建实体类并映射吗? 我如何将表之间的关系映射到identityuser?
不,您的所有Identity类都已映射。 如果要向Identity添加关系,则可以像在上下文本身中继承到Identity类(例如IdentityRole,IdentityUserRole,IdentityUser)的OnModelCreating方法中一样正常进行操作。
有关如何完成此操作的更多信息,请参阅本文 。
在EF 6.0中,更好的方法是拥有两个单独的上下文,然后使用相同的连接字符串和2个不同的迁移配置,这与EF 6中的同一数据库和应用程序中的多个数据库上下文以及代码优先迁移相同 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.