Entity Framework Core 2.1 IdentityUser IdentityDbContext <> Получение IdentityUserLogin требует определения первичного ключа - PullRequest
0 голосов
/ 07 сентября 2018

Я использую Entity Framework Core 2.1, и у меня есть класс,

public class MyDbContext : IdentityDbContext<User>

Таблица User является частью одной и той же базы данных.В классе Entity User он определяется как

public class User : IdentityUser

Когда я запускаю и вызываю userManager.FindByNameAsync(model.Username), я получаю следующую ошибку:

IdentityUser IdentityDbContext <> Получение IdentityUserLogin требует первичногоключ, который будет определен.

Я погуглил и прочитал чью-то статью о возможном решении.Он сказал использовать следующий конструктор

public DXContext(): base("name=DXContext")
{
     Database.SetInitializer<DXContext>(null);// Remove default initializer
     Configuration.ProxyCreationEnabled = false;
     Configuration.LazyLoadingEnabled = false;
}

В моем конструкторе я передаю строку коннектора следующим образом

public MyDbContext()
{
}

// context being added and passing to connection string to use
public MyDbContext(DbContextOptions<ASLDbContext> options) : base(options)
{
   // Database.SetInitializer<MyDbContext>(null);            
}

Я получаю ошибку сборки метода SetInitializer следующим образом:

DatabaseFacade не содержит определения SetInitializer.

Любая помощь будет полезна для решения проблемы первичного ключа IdentityUserLogin.

1 Ответ

0 голосов
/ 07 сентября 2018

Обновите startup.cs пользователя AddDefaultIdentity<User>() вместо AddDefaultIdentity<IdentityUser>

    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddDbContext<MyDbContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection")));
        services.AddDefaultIdentity<User>()
            .AddEntityFrameworkStores<MyDbContext>();

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    }

Ваш DbContext может так же просто, как этот

public class MyDbContext : IdentityDbContext<User>
{
    public MyDbContext(DbContextOptions<MyDbContext> options)
        : base(options)
    {
    }
}

Ваш расширенный класс пользователя

public class User : IdentityUser
{
    public string SomeAdditionalProperty { get; set; }
}

_LoginPartial.cshtml Измените IdentityUser на свой User класс.

@inject SignInManager<User> SignInManager
@inject UserManager<User> UserManager

Эти 4 изменения - все, что нужно для работы Identity с расширенным классом (User) над базовым IdentityUser при запуске из нового проекта со встроенной аутентификацией.

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