Запуск миграций на PersistedGrants для Identity Server 4 завершается неудачно - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь настроить новый экземпляр IS4 на. Net Core 3.1, и выполнение процедуры инициализации завершается неудачно, так как столбец «Ключ» в контексте PersistedGrants кажется недействительным.

Это не происходит в. Net 3.0, мы попытались воспроизвести, предполагая, что это как-то связано с EF Core 3.1, однако я не вижу, что это может быть.

enter image description here

Генерируемый вывод, если он запускается через Add-Migrations:

enter image description here

Я не хотел реализовывать свой собственный реализация этого DbContext, но кажется, что это маршрут, по которому я должен был бы go?

Персистирующий объект Grant

https://github.com/IdentityServer/IdentityServer4/blob/master/src/EntityFramework.Storage/src/Entities/PersistedGrant.cs

1 Ответ

1 голос
/ 15 января 2020

В моем проекте мы пошли по пути добавления нашей собственной сущности в приложение DbContext:

public class PersistedGrant 
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public virtual string Key { get; set; }

    public virtual string Type { get; set; }

    public virtual string SubjectId { get; set; }

    public virtual string ClientId { get; set; }

    public virtual DateTime CreationTime { get; set; }

    public virtual DateTime? Expiration { get; set; }

    public virtual string Data { get; set; }
}

и реализации постоянного хранилища:

public class PersistedGrantStore : IPersistedGrantStore
{
    Dal.MasterDbContext _dbContext;

    public PersistedGrantStore(Dal.MasterDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    private PersistedGrant ToModel(Dal.PersistedGrant entity)
    {
        return new PersistedGrant()
        {
            ClientId = entity.ClientId,
            CreationTime = entity.CreationTime,
            Data = entity.Data,
            Expiration = entity.Expiration,
            Key = entity.Key,
            SubjectId = entity.SubjectId,
            Type = entity.Type
        };
    }

    public Task<IEnumerable<PersistedGrant>> GetAllAsync(string subjectId)
    {
        var grants = _dbContext.PersistedGrants.Where(x => x.SubjectId == subjectId)
            .ToList()
            .Select(x => ToModel(x));

        return Task.FromResult(grants);
    }

    ...
...