C# 是否有任何方法可以直接查询实体框架核心使用的内存中数据库?

C# 是否有任何方法可以直接查询实体框架核心使用的内存中数据库?,c#,.net,database,entity-framework-core,C#,.net,Database,Entity Framework Core,我正在使用内存中的数据库提供程序对.NETCore2.2应用程序进行一些测试。我需要使应用程序中的一个表不可访问-通过重命名或删除它。有没有办法直接对内存中的数据库运行这种查询?我已尝试使用以下方法建立连接: context.Database.GetDbConnection(); 但这是一个错误 特定于关系的方法只能在上下文使用关系数据库提供程序时使用 我知道我可以通过以下方式销毁整个数据库: context.Database.EnsureDeleted(); 但是我需要保留它,只销毁或重命

我正在使用内存中的数据库提供程序对.NETCore2.2应用程序进行一些测试。我需要使应用程序中的一个表不可访问-通过重命名或删除它。有没有办法直接对内存中的数据库运行这种查询?我已尝试使用以下方法建立连接:

context.Database.GetDbConnection();
但这是一个错误

特定于关系的方法只能在上下文使用关系数据库提供程序时使用

我知道我可以通过以下方式销毁整个数据库:

context.Database.EnsureDeleted();

但是我需要保留它,只销毁或重命名一个表。

InMemory提供程序不受关系数据库的支持,并且有一组不同的操作不支持您的情况

您可以改为使用SQLite in memory mode(),然后创建一个截取器,截取已发出的EF命令,并抑制表的创建,或抑制针对该表的其他查询

公共类MyInterceptor:DbCommandInterceptor{
公共覆盖侦听结果非查询执行(DbCommand命令、CommandEventData事件数据、侦听结果){
if(ContainsBannedTable(命令)){
//抑制操作
结果=拦截结果。SuppressWithResult(0);
}
返回base.NonQueryExecuting(命令、事件数据、结果);
}
私有布尔包含可扫描的(DbCommand命令){
//或自定义逻辑
return命令.CommandText.Contains(“todeletentity”);
}
}
尝试访问不需要的表时,以下内容将引发异常(
Microsoft.EntityFrameworkCore.DbUpdateException…SqliteException:SQLite错误1:“没有这样的表:ToDeleteEntity”

var connection=newsqliteconnection(“数据源=:内存:”);
connection.Open();
var options=new DbContextOptionsBuilder()
.UseSqlite(连接)
.AddInterceptors(新的MyInterceptor())
.选项
;
var context=新的MyContext(选项);
context.Database.recreated();
Add(新的AllowedEntity{Id=1});
SaveChanges();
Console.WriteLine(context.AllowedEntity.FirstOrDefault()?.Id)//1-好的
Add(新的todeletentity{Id=1});
//将抛出异常
SaveChanges();
Console.WriteLine(context.todeletentity.FirstOrDefault()?.Id);
//关闭连接并清理
//...
公共类MyContext:DbContext{
公共MyContext(DbContextOptions):基本(选项){
}
公共数据库集允许实体{get;set;}
公共DbSet todeletity{get;set;}
}
公共类到eleentity{
公共int Id{get;set;}
}
公共类允许实体{
公共int Id{get;set;}
}