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 для тестов над память, чтобы иметь возможность проверять транзакции)