在实体框架中从 SQL Server 告诉 MySQL

Posted

技术标签:

【中文标题】在实体框架中从 SQL Server 告诉 MySQL【英文标题】:Telling MySQL from SQL Server in Entity Framework 【发布时间】:2015-03-15 10:37:00 【问题描述】:

我知道这个问题看起来很奇怪,因为 EF 负责 LINQ 到 SQL 的转换,但我正在维护一个应用程序,其中 queries are hardcoded and encrypted in the database itself(并由证明其正确性的律师编写)。

基本上,我可以使用DbContext.Database.Connection 对象触发 SQL 文本,但这些查询是以与方言无关的格式编写的。因此代码根据绑定到配置变量的if case 执行令牌替换

if (Configuration.DbType == DbType.mysql)
    query = ReplaceForMySQL(query);
if (Configuration.DbType == DbType.SQLSERVER)
    query = ReplaceForSqlServer(query);

我可以保留代码原样,也可以删除 Web.config 中的DbType 参数。

DB 使用 EF 连接字符串绑定。我如何知道当前正在使用什么 DBMS?例如,在 NHibernate 中,我可以测试来自 ISessionFactoryConfiguration 的方言

【问题讨论】:

【参考方案1】:

最短的方法是

context.Database.Connection.GetType().Name

其中contextDbContext 实例。这为您提供了 EF 使用的 DbConnection 的实际类型,您可以从中轻松判断哪个提供程序在起作用。

(如果正确,请向您的律师证明 ツ)

【讨论】:

为了律师的缘故,我将建立一个自动化测试套件来比较旧版本和新版本的结果 您不需要律师来做这件事。一点常识就够了。

以上是关于在实体框架中从 SQL Server 告诉 MySQL的主要内容,如果未能解决你的问题,请参考以下文章

实体框架和 SQL Server 视图

实体框架 Code First SQL Server 视图

实体框架 + SQL Server Compact + WPF/WinForms = 缓慢的 UI?

实体框架和 SQL Server Express 瓶颈

是否可以使用实体框架在 SQL Server CE 中实现 CommitMode.Immediate

实体框架和 SQL Server 表属性