【问题标题】:Why doesn't my ConcurrencyCheck work when I use UseInMemoryDatabase?为什么当我使用 UseInMemoryDatabase 时我的 ConcurrencyCheck 不起作用?
【发布时间】:2018-04-11 12:36:32
【问题描述】:
我在内存数据库中使用单元测试。
在条目中我有:
[Required]
[ConcurrencyCheck]
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public byte[] RowVersion { get; set; }
更改 RowVersion 后,SaveChanges 不会抛出异常。
如果我使用 SqlServer 一切正常。
我能用这个做什么?我不会在unitTests中使用sql Server
【问题讨论】:
标签:
database
.net-core
concurrency
in-memory-database
【解决方案1】:
InMemory 提供程序的行为并不总是像关系数据库。
通过调用 UseInMemoryDatabase(),您将获得近似连接到 SQL Server 数据库的轻量级东西,但没有实际数据库连接和 I/O 操作的所有开销。
就像使用 Mocks 一样,对于我们的绝大多数测试来说,这并不重要。添加记录和读回记录之类的基本功能可以正常工作。
但是,如果您想针对行为更像 SQL Server 的东西进行测试(例如检查引用完整性约束或光并发),那么您应该考虑改用 SQLite 内存模式。
查看testing with SQLite 上的这篇微软文章。