当前位置:  开发笔记 > 后端 > 正文

添加没有App.Config的DbProviderFactory

如何解决《添加没有App.Config的DbProviderFactory》经验,为你挑选了2个好方法。

我在我的数据层(基于实体框架)中使用DbProviderFactories并使用SQLite作为我的数据库,但我没有App.Config来拥有以下代码:


  
    
      
      
    
  

相反,我想让我的数据层以编程方式放入.有人知道这样做的方法吗?

编辑:

这样做的原因是我使用IoC容器来选择数据层,而我的一些数据层不需要App.Config值,或者让它们与数据层紧密相连.



1> JoshRivers..:

以下可能会导致太阳黑子和推翻西方文明.它甚至可能引发关于管道磁带编程的讨论(让它停止!),但它的工作原理(现在)

try
{
    var dataSet = ConfigurationManager.GetSection("system.data") as System.Data.DataSet;
    dataSet.Tables[0].Rows.Add("SQLite Data Provider"
    , ".Net Framework Data Provider for SQLite"
    , "System.Data.SQLite"
    , "System.Data.SQLite.SQLiteFactory, System.Data.SQLite");
}
catch (System.Data.ConstraintException) { }


呵呵,它有效.不漂亮,但它是唯一的东西.谢谢!

2> SaxxonPike..:

JoshRivers上面发布了针对SQLite的解决方案.事实上,它也可以用于其他适配器 - 我能够使用他的示例让它适用于MySQL.我把它包装成更通用的东西.这应该在应用程序启动后运行,并且适用于.NET连接器版本6.6.5.0(但我认为它也适用于其他版本.)

string dataProvider = @"MySql.Data.MySqlClient";
string dataProviderDescription = @".Net Framework Data Provider for MySQL";
string dataProviderName = @"MySQL Data Provider";
string dataProviderType = @"MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.6.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d";

bool addProvider = true;
var dataSet = ConfigurationManager.GetSection("system.data") as DataSet;
foreach (DataRow row in dataSet.Tables[0].Rows)
{
    if ((row["InvariantName"] as string) == dataProvider)
    {
        // it is already in the config, no need to add.
        addProvider = false;
        break;
    }
}

if (addProvider)
    dataSet.Tables[0].Rows.Add(dataProviderName, dataProviderDescription, dataProvider, dataProviderType);

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有