实体框架两个项目与共享数据库

时间:2016-01-13 22:59:50

标签: asp.net-mvc entity-framework authentication asp.net-identity dbcontext

我有两个完全不同的项目网站 喜欢:

adminPanel(asp mvc site),utilities(classLibrary),mobileConnection(asp web api)

adminPanel项目和MobileConnection项目具有可分离的身份验证,但他们的帐户有一些共享字段,

公用事业代码(与两个项目共享):

public class MobileApplicationUser : IdentityUser
{
    public virtual Profile Profile { get; set; }

    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<MobileApplicationUser> manager, string authenticationType)
    {       
        var userIdentity = await manager.CreateIdentityAsync(this, authenticationType);
        return userIdentity;
    }
}

public class AdminApplicationUser : IdentityUser
{
    public virtual Organization organization { get; set; }

    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<AdminApplicationUser> manager, string authenticationType)
    {         
        var userIdentity = await manager.CreateIdentityAsync(this, authenticationType);
        return userIdentity;
    }

}

管理员项目代码:

public class ApplicationDbContext : IdentityDbContext<AdminApplicationUser>
{
    public ApplicationDbContext() : base("DefaultConnection", throwIfV1Schema: false)
    {

    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<AdminApplicationUser>().ToTable("AdminUser");
        modelBuilder.Entity<IdentityRole>().ToTable("AdminRole");
        modelBuilder.Entity<IdentityUserRole>().ToTable("AdminUserRole");
        modelBuilder.Entity<IdentityUserClaim>().ToTable("AdminUserClaim");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("AdminUserLogin");
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }

    public DbSet<Profile> Profiles { get; set; }
    public DbSet<Competition> Competitions { get; set; }
    public DbSet<Message> Messages { get; set; }
    public DbSet<Organization> Organizations { get; set; }

}

mobileConnection项目代码:

 public class ApplicationDbContext : IdentityDbContext<MobileApplicationUser>
 {
    public ApplicationDbContext() : base("DefaultConnection", throwIfV1Schema: false)
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<AdminApplicationUser>().ToTable("MobileUser");
        modelBuilder.Entity<IdentityRole>().ToTable("MobileRole");
        modelBuilder.Entity<IdentityUserRole>().ToTable("MobileUserRole");
        modelBuilder.Entity<IdentityUserClaim>().ToTable("MobileUserClaim");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("MobileUserLogin");
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }

    public DbSet<Profile> Profiles { get; set; }
    public DbSet<Competition> Competitions { get; set; }
    public DbSet<Message> Messages { get; set; }
    public DbSet<Organization> Organizations { get; set; }

}

我的个人资料和组织有关系, 所以...我不能更新数据库两个项目,并有我的目标! 我该怎么办?

1 个答案:

答案 0 :(得分:1)

假设这是代码第一个问题。 是的,您可以使用1个DB Context访问多个数据库,或者让多个DBContexts访问1个数据库。管理迁移是关键挑战。

  

有界DBContext和实体框架

是开始研究的好地方