是否有可能告诉asp身份使用与应用程序dbcontext相同的dbcontext?我的表需要与单位表相关联。每个表都有链接到标识表的createuser和edituser字段。如果asp使用自己的dbcontext,那么我还必须将实体和映射到标识表添加到应用程序的dbcontext。对于这种情况,有更好的方法吗?我首先使用实体框架代码6和asp mvc 5。
编辑
根据下面的答案,我可以使用相同的dbcontext,只要我的dbcontext继承自IdentityContext。
我的问题:
我仍然需要手动创建实体类和映射吗?如何将表之间的关系映射到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类都已经映射了。如果你想添加关系到你的身份,你可以这样做,你通常会在OnModelCreating方法在上下文本身引用你的身份类(例如:IdentityRole, IdentityUserRole, IdentityUser).
有关如何完成此操作的更多信息,请参阅本文。
在EF 6.0中,更好的方法是有两个独立的上下文,然后使用相同的连接字符串和2个不同的迁移配置EF 6和代码优先迁移中相同DB和应用程序中的多个DB上下文