entity-framework - Entity Framework 添加没有 App.Config的DbProviderFactory

  显示原文与译文双语对照的内容
140 0

我在数据层( 基于 Entity Framework ) 中使用 DbProviderFactories,并使用sql数据库为数据库,但是不必使用 App.Config 来具有以下代码:


<configuration>


 <system.data>


 <DbProviderFactories>


 <remove invariant="System.Data.SQLite"/>


 <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite"/>


 </DbProviderFactories>


 </system.data>


</configuration>



相反,我想让我的数据层以编程的方式。 有谁知道怎么做?

编辑:

我的原因是我使用一个IoC容器来选择数据层,并且我的数据层不需要 App.Config 值。

时间: 原作者:

126 2

以下可能会导致太阳黑子和 overthrow 。 它甚至可能引起关于管道磁带编程( 让它停止)的争论,但它可以工作( 目前) !


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) { }



原作者:
76 3

上面的JoshRivers为SQLite发布了一个解决方案。 这实际上可以用于它的他适配器作为 well-,我可以使用它的示例使它工作。 我把它包装成一些更通用的东西。 这应该在应用程序启动后运行,对于. 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);



...