如何测试 DbContext 是否在内存中?
How do I test whether a DbContext is in memory?
我使用 .Net Core 2.1.
我的应用程序使用 Entity Framework Core
,上下文 CoreDbContext
来自 DbContext
.
对于单元测试,我使用 CoreDbContext
的内存版本,在我的 Startup.cs
中产生了这段代码:
if (useInMemoryDatabase)
{
services.AddDbContext<CoreDbContext>(options =>
options.UseInMemoryDatabase("dbname"));
}
else
{
services
.AddDbContext<CoreDbContext>(options =>
options.UseSqlServer(DefaultDbConnectionString));
}
我还有通过上下文访问数据库的方法。这些有时需要知道上下文是否在内存中,因为内存中上下文的行为与普通上下文不同:
void AddRecordX(CoreDbContext context)
{
bool contextIsInMemory = .....;
}
如何测试上下文是否在内存中或与真实的 SQL Server database
关联?
每个 EF Core 数据库提供程序都将扩展方法添加到 DatabaseFacade
class,可用于检测为上下文配置的提供程序。
对于 SQL 服务器,它被称为 IsSqlServer()
,对于 MySQL - IsMySql()
,对于 SQLite - IsSqlite()
等等。在记忆中 - 不足为奇 IsInMemory()
:)
void AddRecordX(CoreDbContext context)
{
bool contextIsInMemory = context.Database.IsInMemory();
}
唯一棘手的是,由于这些是扩展方法,项目必须引用相应的包。
我使用 .Net Core 2.1.
我的应用程序使用 Entity Framework Core
,上下文 CoreDbContext
来自 DbContext
.
对于单元测试,我使用 CoreDbContext
的内存版本,在我的 Startup.cs
中产生了这段代码:
if (useInMemoryDatabase)
{
services.AddDbContext<CoreDbContext>(options =>
options.UseInMemoryDatabase("dbname"));
}
else
{
services
.AddDbContext<CoreDbContext>(options =>
options.UseSqlServer(DefaultDbConnectionString));
}
我还有通过上下文访问数据库的方法。这些有时需要知道上下文是否在内存中,因为内存中上下文的行为与普通上下文不同:
void AddRecordX(CoreDbContext context)
{
bool contextIsInMemory = .....;
}
如何测试上下文是否在内存中或与真实的 SQL Server database
关联?
每个 EF Core 数据库提供程序都将扩展方法添加到 DatabaseFacade
class,可用于检测为上下文配置的提供程序。
对于 SQL 服务器,它被称为 IsSqlServer()
,对于 MySQL - IsMySql()
,对于 SQLite - IsSqlite()
等等。在记忆中 - 不足为奇 IsInMemory()
:)
void AddRecordX(CoreDbContext context)
{
bool contextIsInMemory = context.Database.IsInMemory();
}
唯一棘手的是,由于这些是扩展方法,项目必须引用相应的包。