Класс DbContext в Asp.net MVC 5 с Identity 2.0

При использовании Entity Framework у вас должен быть класс контекста, производный от DbContext.

Asp.net Identity использует EF, а шаблон по умолчанию создает следующий класс:

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

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

Этот класс не является производным напрямую от DbContext. Для моих собственных данных (моих классов, которые я хочу сохранить в базе данных) должен ли я создавать свой собственный класс контекста базы данных?

Если я хочу выполнить операцию, которая обновит как пользователя идентификации, так и один из моих собственных классов, мне нужно использовать оба контекста. Так что это не кажется очень естественным.

Следует ли мне продолжать использовать класс ApplicationDbContext в качестве контекста и для моих собственных классов? Это сработает?

Как лучше всего использовать EF для моих собственных классов при использовании удостоверения?


person Emre Kenci    schedule 10.02.2015    source источник
comment
Прочтите цепочку наследования .... IdentityDbContext является производным от DbContext.   -  person Tetsujin no Oni    schedule 11.02.2015
comment
Я бы использовал отдельные контексты в своих приложениях, но тогда я бы также использовал шаблон репозитория, поэтому на каком-то уровне это действительно не имеет значения. Отдельные контексты могут быть полезны, если вы развертываете свою систему членства на сервере, отличном от домена db, в соответствии с СОП многих крупных компаний.   -  person rism    schedule 11.02.2015
comment
Откуда вы взяли, что IdentityDbContext не является производным от DbContext?   -  person Erik Funkenbusch    schedule 11.02.2015


Ответы (1)


Используйте один класс контекста, унаследованный от IdentityDbContext. Дополнительную информацию см. В этом ответе.

Вам нужно добавить DbSets для всех ваших классов в ApplicationDbContext.

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

    //Public DBSets
    public DbSet<LeaveApplication> LeaveApplications { get; set; }
    public DbSet<LeaveStatus> LeaveStatus { get; set; }
    public DbSet<Department> Departments { get; set; }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}
person Dhaust    schedule 10.02.2015