Добавление уникального индекса в EF Core mapping не работает - PullRequest
0 голосов
/ 10 сентября 2018

мы используем EF Core в нашем решении API ядра ASP.NET. В базе данных есть таблица транзакций, а также уникальный индекс, содержащий два столбца. Поэтому в этой таблице не должно быть записей с одинаковыми значениями для этих столбцов.

В нашем EF-отображении мы имеем это

        builder.HasIndex(e => new { e.RsaSessionId, e.SessionId }).IsUnique(true).HasName("IX_Transactions");

        builder.Property(e => e.RsaSessionId)
            .HasColumnName(nameof(Transaction.RsaSessionId))
            .IsRequired();

        builder.Property(e => e.SessionId)
            .HasColumnName(nameof(Transaction.SessionId))
            .IsRequired()
            .HasColumnType("uniqueidentifier");

Но в наших интеграционных тестах, где мы используем провайдера базы данных в памяти, не будет возникать ошибки, когда два идентичных объекта транзакции добавляются в транзакции DbSet объекта DbContext. Разве этот код не должен вызывать ошибку, так как мы указали, что существует уникальный ключ, который включает эти два столбца?

var rsaSessionID=1;
Guid issuerSessionId=Guid.NewGuid();

//create two transactions with the same values for the two fields in the unique index
    var transaction = new Transaction(rsaSessionID, issuerSessionId, ... other fields ... );
    var transaction = new Transaction(rsaSessionID, issuerSessionId, ... other fields ... );
    this.fixture.Context.Transactions.Add(transaction);
this.fixture.Context.Transactions.Add(transaction2);
this.fixture.Context.SaveChanges();

Любая помощь очень ценится.

1 Ответ

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

InMemory не является реляционной базой данных.

InMemory позволит вам сохранить данные, которые будут нарушать ограничения ссылочной целостности в реляционной базе данных.

Если вы хотите проверить что-то, что ведет себя больше как настоящая реляционная база данных, рассмотрите возможность использования режима SQLite в памяти .

Ссылка: InMemory не является реляционной базой данных

...