Преобразование MVC4 Dbcontext в MVC5 ApplicationDbContext

В настоящее время я клонирую MVC5 с идентификацией. Ранее я кодировал приложение MVC4 Code First Entity Framework и хотел обновить его до MVC5 из-за идентификаторов. В настоящее время я пытаюсь добавить контроллер, но мне нужно выбрать класс контекста данных. В MVC4 я создал dbcontext с именем Issue Context и мне было интересно, как мне его преобразовать, чтобы он был совместим с ApplicationDbContext (MVC5)

IssueContext.cs в MVC4

public class IssueContext : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Ticket> Tickets { get; set; }
    public DbSet<Category> Categories { get; set; }
    public DbSet<Department> Departments { get; set; }
    public DbSet<Depot> Depots { get; set; }


    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

    }
}

ApplicationdbContext в IdentitiyModels.cs

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

    static ApplicationDbContext()
    {
        Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());
    }

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

Обновленное приложение MV5DBContext.cs

public class ApplicationUser : IdentityUser
{
    public async Task<ClaimsIdentity> 
        GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        var userIdentity = await manager
            .CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        return userIdentity;
    }

    public int UserID { get; set; } <---We don't need this right?

    public bool IsAdministrator { get; set; }
    [StringLength(50, MinimumLength = 1)]
    public string LastName { get; set; }
    [StringLength(50, MinimumLength = 1, ErrorMessage = "First name cannot be longer than 50 characters.")]

    [Column("FirstName")]
    public string FirstMidName { get; set; }

    public string FullName
    {
        get { return FirstMidName + " " + LastName; }
    }
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime EnrollmentDate { get; set; }

    public int DepartmentID { get; set; }
    [ForeignKey("DepartmentID")]
    public virtual Department Department { get; set; }
    public int DepotID { get; set; }
    [ForeignKey("DepotID")]
    public virtual Depot Depot { get; set; }
    public virtual ICollection<Ticket> Tickets { get; set; }
}


public class ApplicationRole : IdentityRole
{
    public ApplicationRole() : base() { }
    public ApplicationRole(string name) : base(name) { }
    public string Description { get; set; }

}


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


    public DbSet<Ticket> Tickets { get; set; }
    public DbSet<Category> Categories { get; set; }
    public DbSet<Department> Departments { get; set; }
    public DbSet<Depot> Depots { get; set; }

    static ApplicationDbContext()
    {
        Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());
    }

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

}

2 ответа

Решение

Вам нужно сделать так, чтобы класс User наследовал от IdentityUser, а затем удалить набор данных пользователей, в то время как другой набор данных остался нетронутым.

public class ApplicationDbContext : IdentityDbContext<User>
{
public ApplicationDbContext()
    : base("DefaultConnection")
{
}

public DbSet<Ticket> Tickets { get; set; }
public DbSet<Category> Categories { get; set; }
public DbSet<Department> Departments { get; set; }
public DbSet<Depot> Depots { get; set; }

static ApplicationDbContext()
{
    Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());
}

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


public class User : IdentityUser{

  // other properties
}

IdentityDbContext наследует DbContext. Вы можете просто добавить свои DbSets из исходного контекста в ApplicationDbContext. Однако вы можете использовать два отдельных контекста, чтобы у вас не было инструментов идентификации, которые запутывали вашу базу данных.

Другие вопросы по тегам