Подтвердить что ты не робот

Почему так много репозиториев в ASP.NET Identity `UserStore`?

Я собираюсь преобразовать проект Identity Microsoft.AspNet.Identity.EntityFramework (v 2.0.0.0) в тот, который использует NHibernate в качестве своей машины настойчивости. Мой первый "камень преткновения" - это набор репозиториев в классе UserStore:

private readonly IDbSet<TUserLogin> _logins;
private readonly EntityStore<TRole> _roleStore;
private readonly IDbSet<TUserClaim> _userClaims;
private readonly IDbSet<TUserRole> _userRoles;
private EntityStore<TUser> _userStore;

Параметр типа TUser ограничен IdentityUser<TKey, TUserLogin, TUserRole, TUserClaim>, и этот тип имеет свой собственный набор наборов:

public virtual ICollection<TRole> Roles { get; private set; }
public virtual ICollection<TClaim> Claims { get; private set; }
public virtual ICollection<TLogin> Logins { get; private set; }

Моя жизнь была бы намного проще, если бы мне пришлось управлять только одним репозиторием, TUser, так как каждый из этих пользователей уже заботится о своих собственных вещах. Есть ли какая-то важная причина, по которой я не могу просто покончить с этим (чтобы избавиться от любых зависимостей от Entity Framework, например DbSet?

Я мог бы придумать свой собственный класс репозитория вместо DbSet, чтобы соответствовать этому дизайну UserStore, но я бы предпочел просто потерять их и позволить каждому экземпляру пользователя заботиться о своих собственных претензиях и т.д.

4b9b3361

Ответ 1

Дополнительные классы DbSet предназначены для сохранения данных, связанных с требованиями пользователя, ролями и входами, а поля ICollection - это свойства навигации, которые позволяют вам считывать данные из этих таблиц через выбранного вами пользователя.

Если вы собираетесь полностью преобразовать структуру Identity (и скорость бота к вам), вам понадобятся эти объекты базы данных для управления этими данными.

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