我正在使用EF 6.0並希望將AppDbContext
& IdentityDbContext
合併到單個上下文中,該上下文爲AppDbContext
。Combining AppDbContext和IdentityDbContext問題
這是一個需求,因爲我有其他表與EF創建的AspNetUsers表有關係。
問題是EF正在爲用戶創建兩個表格,如AspNetUsers
和IdentityUsers
。
另外如果我在DbContext中使用DbSet<ApplicationUser>
而不是DbSet<IdentityUsers>
,那麼add-migration會拋出錯誤。
我AppDbContext是
public class AppDbContext : IdentityDbContext<ApplicationUser>,IDisposable
{
public AppDbContext()
: base("MvcArchBSEFDB", throwIfV1Schema: false)
{
}
public static AppDbContext Create()
{
return new AppDbContext();
}
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
//public DbSet<ApplicationUser> AppUsers { get; set; } // breaks migration
//Multiple object sets per type are not supported. The object sets 'AppUsers ' and 'Users' can both contain instances of type 'MvcArchBS.DAL.Setp.ApplicationUser'.
public DbSet<IdentityUser> AppUsers { get; set; } // Creates Two Tables AspNetUsers & IdentityUser
public DbSet<IdentityUserRole> UserRoles { get; set; }
public DbSet<IdentityUserClaim> Claims { get; set; }
public DbSet<IdentityUserLogin> Logins { get; set; }
public DbSet<Module> Modules { get; set; }
public DbSet<SubModule> SubModules { get; set; }
public DbSet<PageMst> Pages { get; set; }
public void Dispose()
{
base.Dispose();
}
}
而且我ApplicationUser類是
public class ApplicationUser : IdentityUser
{
public ApplicationUser()
{
status = "A";
reptngusrid = "admin";
}
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int usrid { get; set; }
public string usrdescr { get; set; }
public int empid { get; set; }
public int usrgrpid { get; set; }
[StringLength(1)]
public string status { get; set; }
public string reptngusrid { get; set; }
public int defmodid { get; set; }
[StringLength(20)]
public string cltur { get; set; }
[ForeignKey("defmodid")]
public virtual Module Module { get; set; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}
我如何得到這個工作?我想在我的查詢中使用context.AppUsers之類的東西,這是我無法得到的。
IdentityDbContext已經有DbSet Users {get;組; }。所有其他身份實體也一樣。你不應該包含它們。 –
tmg
@tmg是的。但它不顯示在AppDbContext屬性 – Deb
@Deb它應該在那裏作爲用戶,而不是AppUsers。根據上面的@tmg,你也應該刪除'UserRoles','Claims'和'Logins' - 它們都已經在'IdentityDbContext'中定義了。 –