我们在ASP.NET核心API解决方案中使用EF Core。数据库中有一个事务表,并且有一个包含两列的唯一索引。因此,此表中不应包含这些列具有相同值的记录。
在我们的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");
但是在我们使用内存数据库提供程序的集成测试中,当在DbContext的Transactions DbSet中添加两个相同的事务对象时,不会出现任何错误。既然我们已经指定了包含这两列的唯一键,那么此代码是否应该不会引发错误?
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();
非常感谢您的帮助。
答案 0 :(得分:3)
InMemory
不是关系数据库。
InMemory将使您可以将违反参照完整性约束的数据保存在关系数据库中。
如果您要对某些行为更像是真正的关系数据库进行测试,请考虑使用SQLite in-memory模式。