Тест модуля EF Core Sqlite EfCoreJsonValueConverter не может преобразовать дочерний список - PullRequest
0 голосов
/ 30 апреля 2020
public abstract BaseHand {
    public List<BaseBet> Bets { get; set; }
}

public class BaseBet
{
    public decimal? Amount { get; set; }
}

public class ImplBet : BaseBet { }

public class HandEntityTypeConfiguration : IEntityTypeConfiguration<BaseHand>
    {
        public void Configure(EntityTypeBuilder<BaseHand> builder)
        {
            builder.ToTable("Hands")
                .HasDiscriminator(h => h.GameType)
                .HasValue<PokerHand>(GameType.TexasHoldemNoLimit)
                .HasValue<PokerHand>(GameType.TexasHoldemPotLimit);

            builder.Property(h => h.Bets).HasJsonValueConversion();
        }
    }

Я сохраняю Список ставок в виде большого двоичного объекта json в БД с Innofactor.EfCoreJsonValueConverter Когда я возвращаю руку, ставки автоматически возвращаются в список. Мне нужно привести ставки обратно к правильному типу.

В модульном тесте создается рука, классы ImplBet сохраняются в БД и возвращаются обратно (проверка заключается в проверке правильности приведения).

Когда я использую EF Inmemory, тест работает отлично. Когда я использую sqlite, произойдет сбой приведения:

System.InvalidCastException : Unable to cast object of type 'BaseBet' to type 'ImplBet'.

Не могу понять, почему Sqlite это не нравится, а в памяти options.UseInMemoryDatabase(Guid.NewGuid().ToString()) работает.

(перешел к использованию Sqlite для тестов над память, чтобы иметь возможность проверять транзакции)

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