Множественный DbContext в ASP MVC: возможно ли избежать наследования IdentityDbContext? - PullRequest
0 голосов
/ 20 марта 2019

Я использую EntityFramework 6. Я хотел бы разделить мой DbContext на несколько меньших. Изменить: У меня есть одна база данных, к которой я хочу подключиться.

У меня будет один DbContext со всеми сущностями и миграциями, которые будет использовать только одно центральное приложение. Другие приложения будут использовать меньший DbContext без миграций.

Я обнаружил, что мне нужно наследовать весь DbContext от IdentityDbContext, даже если они не используют ничего из этого.

internal class SmallerDbContext : IdentityDbContext<ApplicationUser, 
ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{
    public DbContext<Entity1> NotInSmallerDbContext { get; set; }
    public DbContext<Entity1> InSmallerDbContext { get; set; }
}

Я бы хотел, чтобы это было:

internal class SmallerDbContext : System.Data.Entity.DbContext
{
    public DbContext<Entity1> InSmallerDbContext { get; set; }
}

Но это приводит к следующим ошибкам:

Paris.DAL.Repo.DbContext.ApplicationUserLogin: : EntityType 'ApplicationUserLogin' has no key defined. Define the key for this EntityType.
Paris.DAL.Repo.DbContext.ApplicationUserRole: : EntityType 'ApplicationUserRole' has no key defined. Define the key for this EntityType.
ApplicationUserLogins: EntityType: EntitySet 'ApplicationUserLogins' is based on type 'ApplicationUserLogin' that has no keys defined.
ApplicationUserRoles: EntityType: EntitySet 'ApplicationUserRoles' is based on type 'ApplicationUserRole' that has no keys defined.

Я пытался добавить эти таблицы в DbContext, но безрезультатно.

public IDbSet<ApplicationUser> Users { get; set; }
public IDbSet<ApplicationRole> Roles { get; set; }

Можно ли как-нибудь создать DbContext, который не наследуется от IdentityDbContext?

1 Ответ

1 голос
/ 16 июля 2019

Я был на правильном пути, добавив объекты в DbContext. Вам нужно добавить только два, User и UserLogin. Другие не нужны.

    public DbSet<ApplicationUser> Users { get; set; }
    public DbSet<ApplicationUserLogin> UserLogins { get; set; }

Кроме того, вам необходимо установить правильную таблицу для обоих объектов и добавить некоторые виртуальные свойства, чтобы Entity Framework мог обрабатывать эти типы так же, как и любые другие ваши классы.

[Table("AspNetUsers")]
public class ApplicationUser : IdentityUser<int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{
}


[Table("AspNetUserLogins")]
public class ApplicationUserLogin : IdentityUserLogin<int>
{
    [Key, Column(Order = 0)]
    public override string LoginProvider { get; set; }

    [Key, Column(Order = 1)]
    public override string ProviderKey { get; set; }

    [Key, Column(Order = 2)]
    public override int UserId { get; set; }
}

Теперь ваш DbContext больше не должен наследоваться от IdentityDbContext.

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