Entity Framework Основная проблема с внешним ключом в IdentityUser - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь создать новую запись в моей базе данных с помощью EF Core, например:

RefreshToken newDBRefreshToken = new RefreshToken()
{
    Id = 0,
    Token = refreshToken,
    AccessToken = accessToken,
    UserId = userId
};

_dbContext.RefreshToken.Add(newDBRefreshToken);

Я получаю это сообщение об ошибке при сохранении:

Установлен внешний ключ '{UserId: 5b82dbb0-c38b-4144-b51d-e092ef6f5e55}' в RefreshToken со значением ключа {Id: -2147482647} соответствует сущность типа 'IdentityUser', однако основной тип сущности должен быть назначен на «ApplicationUser».

У меня есть две сущности:

//To make it possible to use AspNetUsers as a reference table
public class ApplicationUser : IdentityUser
{
}

public class RefreshToken : BaseEntity //Has int Id and CreateDate ect...
{
    //Reference the IdentityUser
    public string UserId { get; set; }
    public ApplicationUser User { get; set; }

    public string Token { get; set; }
    public string AccessToken { get; set; }
    public DateTime ValidUntil { get; set; }
}

миграция создала мою таблицу RefreshToken следующим образом: enter image description here

Edit: Это мой раздел Startup.cs:

services.AddDbContext<ApiContext>(options =>
    options.UseSqlServer(connection, builder => builder.MigrationsAssembly(typeof(Startup).Assembly.FullName)
 ).EnableSensitiveDataLogging(true));

// ===== Add Identity ========
services.AddIdentity<ApplicationUser, IdentityRole>()
    .AddEntityFrameworkStores<ApiContext>()
    .AddErrorDescriber<IdentityErrorDescriberDE>()
    .AddDefaultTokenProviders();

Я пытался использовать ApplicationUser в качестве TUser, что выдает мне эту ошибку:

InvalidOperationException: невозможно разрешить службу для типа 'Microsoft.AspNetCore.Identity.UserManager`1 [Microsoft.AspNetCore.Identity.IdentityUser] при попытке активировать Web.Controllers.AccountController.

Это мой контекст:

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