Создание интерфейса DbContext с EF6 и Identity - PullRequest
0 голосов
/ 16 октября 2019

Я хочу создать интерфейс для моего ApplicationDbContext. Однако он наследует от IdentityDbContext.

 public class ApplicationDbContext
        : IdentityDbContext<ApplicationUser, ApplicationRole, int,
        ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>, IDbContext

В настоящее время IDbContext не имеет ссылок на таблицы IdentityDbContext, такие как Users, Roles и т. Д. Поэтому, когда я использую интерфейс в моем коде все, чтоДоступ к таблицам идентификации не будет работать, потому что интерфейс не включает их. Я попытался добавить

IDbSet<ApplicationUser> 

к своему ApplicationDbContext, чтобы я мог ссылаться на него в интерфейсе, но это сбивает с толку, потому что ApplicationUser - это пользовательская реализация IdentityUser. Как я могу создать этот интерфейс, чтобы я мог ссылаться на все таблицы, к которым у моего ApplicationDbContext есть доступ, но через интерфейс?

1 Ответ

0 голосов
/ 16 октября 2019

Вам просто нужно скопировать свойства в вашем интерфейсе. Например:

public interface IDbContext
{
    IDbSet<ApplicationUser> Users { get; set; }
    IDbSet<ApplicationRole> Roles { get; set; }
    // etc
}

Вы также можете абстрагировать интерфейс, чтобы сделать его более совместимым с объектами Identity:

public interface IDbContext<TUser, TRole, TKey, TUserLogin, TUserRole, TUserClaim>
    where TUser : IdentityUser<TKey, TUserLogin, TUserRole, TUserClaim>
    where TRole : IdentityRole<TKey, TUserRole>
    where TUserLogin : IdentityUserLogin<TKey>
    where TUserRole : IdentityUserRole<TKey>
    where TUserClaim : IdentityUserClaim<TKey>
{ 
    IDbSet<TUser> Users { get; set; }
    IDbSet<TRole> Roles { get; set; }
    // etc
}

И настроить свой контекст:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, int,
        ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>,
    IDbContext<ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
...