мы используем 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();
Любая помощь очень ценится.