在我们的ASP.NET Core和EF Core系统中,我们为系统的不同部分使用不同的数据库。我需要能够在运行时告诉使用哪个数据库提供程序,因为有些东西需要考虑到这一点。
在启动期间,SQL Server有这个:
services.AddDbContext<MyContext>(
options => options.UseSqlServer(config.GetConnectionString("DefaultConnection"))
);
或者这适用于SQLite:
services.AddDbContext<MyContext>(
options => options.UseSqlite(config.GetConnectionString("DefaultConnection"))
);
关键在于使用哪个数据库的知识,包含在系统内的某个地方。
在系统的某个任意点,我如何确定我正在使用哪个数据库?我可以访问MyContext
。那里有什么可以揭示这些信息吗?
答案 0 :(得分:5)
系统中您可以访问MyContext
的任何地方,请执行以下操作:
context.Database.GetDbConnection().GetType().Name
例如,SQLite为SqliteConnection
,SQL Server为SqlServerConnection
等。
但是我不确定您之后是否需要处理连接!
答案 1 :(得分:4)
我在我的项目中使用2个数据库提供程序。
可以从Nuget软件包管理器中添加引用,包括在您的客户端项目中。
参考文献包含以下扩展方法。
Boolean isPostgreSQL = context.Database.IsNpgsql();
Boolean isSqlServer = context.Database.IsSqlServer();
答案 2 :(得分:2)
我不确定是否有公开的方式,但你可以查看context.Database.DatabaseCreator(你必须使用反射来访问DatabaseCreator),但通过查看类型,你可以告诉它是什么样的联系。例如,使用SQL,您将获得SqlServerDatabaseCreator。
编辑:是的,看看代码,我认为除了上面提到的内容之外,我还没有其他方法可以说明。 UseSqlServer方法不会在任何地方设置任何标志或类似的任何标志。这只是一家工厂。答案 3 :(得分:1)
您可以开始的一点是DbContextOptions<T>
,这是AddDbContext<T>
方法的作用,您可以看到here。
然后将其注入DbContext。
您也可以尝试在服务中请求DbContextOptions
或DbContextOptions<MyContext>
,然后对Extensions词典进行交互/检查。
答案 4 :(得分:1)
对于EF Core 2:
dbContext.Database.ProviderName