Rag*_*ock 7 sql-server entity-framework-core
我已在 Entity Framework Core 中打开连接弹性:
services.AddDbContext<MyDbContext>( options =>
options.UseSqlServer(Configurations["ConnectionString"]),
sqlServerOptionsAction: sqlOptions =>
{
sqlOptions.EnableRetryOnFailure(
maxRetryCount: 10,
maxRetryDelay: TimeSpan.FromSeconds(5),
errorNumbersToAdd: null);
});
Run Code Online (Sandbox Code Playgroud)
现在我想创建一些单元测试来证明这确实有效。可以做这样的事情吗?
似乎InMemoryDbContext没有该EnableRetryOnFailure方法,我能找到的最相似的测试是在 EF6 中:
https ://thedatafarm.com/data-access/testing-out-the-connection-resiliency-feature-into-ef6/
(而且遵循起来有点复杂)
作为一些附加信息,我正在使用 SQL Server 2017 和 Entity Framework Core 2.2.0,当手动测试时,如果我使数据库脱机,它会立即失败。
我是否测试错误或者我缺少一些正确设置的东西?
Jeroen Mostert 在评论中回答了这个问题:
如果“使数据库脱机”的字面意思是将数据库状态设置为脱机,那么失败是预料之中的——这不是弹性防范的条件之一,因为它不是一种很可能及时自行解决的瞬态条件。如果服务器已启动但数据库已明确设置为脱机,您将立即将其作为错误返回 - 如果需要,添加重试取决于您的应用程序。要测试连接弹性,您必须关闭服务器本身 - 即关闭 SQL Server(或防火墙端口 1433,效果相同)。
顺便说一句,如果需要的话,errorNumbersToAdd 属性应该允许您将“数据库脱机”标记为暂时性错误 - 错误号为 942。仅当它在生产中也有意义时才使用它 - 否则,为了测试,它添加 50000 更有意义,这是自定义 RAISERROR 的错误号(例如 RAISERROR('这是一个暂时性错误!', 11, 0)),它很容易在查询中注入。当然,也不要在生产中使用它,因为大多数自定义错误不应该盲目地重试——使用像 Polly 这样的东西更有意义。
这似乎是最好的解释。
| 归档时间: |
|
| 查看次数: |
2676 次 |
| 最近记录: |