我正在尝试使用LinqToDb的本地SqlLite数据库(在我的app_data中)。
任何人都知道为什么LinqToDb无法使用以下连接字符串?
<connectionStrings>
<add name="RecyclesDB"
providerName="System.Data.SqlLite"
connectionString="data source=|DataDirectory|Recycles.sqlite3;Version=3;"
/>
</connectionStrings>
我可以完美地使用这个连接字符串来检索旧式的数据。
SQLiteConnection sqlConn;
var sqlCmd = new SQLiteCommand();
using (sqlConn = new SQLiteConnection(ConfigurationManager.ConnectionStrings["RecyclesDB"].ConnectionString))
{
sqlConn.Open();
sqlCmd.Connection = sqlConn;
/* .... */
}
但是,当我尝试将LinqToDB与以下t4模板一起使用时,它将失败
<#@ template language="C#" debug="True" hostSpecific="True" #>
<#@ output extension=".generated.cs" #>
<#@ include file="$(ProjectDir)LinqToDB.Templates\LinqToDB.SQLite.Tools.ttinclude" #>
<#@ include file="$(ProjectDir)LinqToDB.Templates\PluralizationService.ttinclude" #>
<#
NamespaceName = "RecycleDashboard";
LoadSQLiteMetadata(LoadSQLiteMetadata(@"C:\inetpub\RecycleDashboard\app_data", "Recycles.sqlite3"););
GenerateModel();
#>
指定问题。 T4模板可以生成模型,但是当我尝试使用以下代码时,我得到一个空引用
using (var db = new RecyclesDB())
{
var recycles =
(from recycle in db.AppRecycles
select recycle).ToList();
}
新RecyclesDB()的例外是:
System.NullReferenceException was unhandled by user code
HResult=-2147467261
Message=Object reference not set to an instance of an object.
Source=linq2db
StackTrace:
at LinqToDB.Data.DataConnection..ctor(String configurationString) in i:\linq2db\Source\Data\DataConnection.cs:line 41
at LinqToDB.Data.DataConnection..ctor() in i:\linq2db\Source\Data\DataConnection.cs:line 24
at RecycleDashboard.RecyclesDB..ctor() in
...
有人知道这里有什么问题吗?
答案 0 :(得分:0)
好的,以防万一其他人偶然发现Sqlite Dataprovider的问题
我解决了这个问题,但具体指定了我的DataConnection,如下所示 (https://github.com/linq2db/linq2db上建议的GetDataProvider和GetConnection):
public partial class RecyclesDB : LinqToDB.Data.DataConnection
{
public RecyclesDB() : base(GetDataProvider(), GetConnection()) { }
private static IDataProvider GetDataProvider()
{
return new LinqToDB.DataProvider.SQLite.SQLiteDataProvider();
}
private static IDbConnection GetConnection()
{
return new SQLiteConnection(ConfigurationManager.ConnectionStrings["RecyclesDB"].ConnectionString);
}
}
不确定为什么T4模板生成的代码失败,但看起来LinqToDB DataConnection类无法解析数据提供者名称&#39; System.Data.SQLite&#39;自动。