.NET Framework 4.0 安装SQLite Provider碰到的一些问题

怎么在.NET中安装SQLite provider就不说了。网上一搜一大把。

这里是一篇InfoQ上的文章:SQLite——只要3分钟,你就可以在.NET上创建和运行它

 

这里只说碰到的两个问题。

 

1. 连接数据库时出现错误 -- 混合模式程序集是针对“v2.0.50727”版的运行时生成的……

建立 SQLiteConnection 时抛出异常 FileLoadException 。具体错误信息为:混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集

 

这是因为.NET Framework 4.0中把版本号全部统一成4.0了,而这个SQLite provider是.NET 2.0的。解决方法也很简单。在app.config的configuration节点下加入以下节点:

 

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0"/>
</startup>

 

想了解原理的可以去看 这篇文章

 

 

2. 使用DataContext对象(Linq的用法)连接数据库,长时间程序无响应

 

如果你为了图省事不想建立SQLiteConnection,直接建立DataContext,像这样:

 

var dc = new DataContext(@"data source=your_sqlite_db_path");

 

那么稍后执行查询的时候,就会出现程序长时间无响应的情况。我想这是因为程序会默认创建 SQLServer 的 connection 而不是 SQLite 的 connection 的缘故。解决方法也很简单。手动建立一个 SQLiteConnection 然后传给 DataContext 就行。像这样:

 

var conn = new SQLiteConnection(@"data source=your_sqlite_db_path");
var dc = new DataContext(conn);

 

 

顺便附上一小段Linq代码,算是备忘:

 

string dbPath = @"your_sqlite_db_path";
var dc = new DataContext(new SQLiteConnection(dbPath));

Table<User> user = dc.GetTable<User>();

// Linq form
// var query = from u in user
//                    where u.Name = "David"
//                    select u;

// lambda expression form
var query = user.AsQueryable().Where(u => u.Name == "David").Select(u => u);

foreach (User u in query)
    Console.WriteLine("id: {0}, Name: {1}", u.Id, u.Name);

 

其中User是数据表的实体类。定义如下:

 

// // table definition
// CREATE TABLE users (
//   id INTEGER PRIMARY KEY AUTOINCREMENT,
//   name VARCHAR(30)
// )

[Table(Name="users")]
class User
{
    [Column(Name="id")]
    public int Id { get; set; }

    [Column(Name="name")]
    public string Name { get; set; }
}

 

搞Rails习惯了,表没有按照SQLServer的那一套命名规则来,所以还需要手动指定表名和字段名。如果表名和字段名都和实体类一样的话,就没必要手动指定映射了。不过Attribute还是要写的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值