LINQ TO SQLite实践指南

本文介绍如何在.NET项目中使用SQLite数据库,并通过LINQ to SQLite实现数据操作。内容覆盖SQLite安装、数据库创建、DataContext生成及代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言
 

当前,软件应用程序中,数据库已经成为不可缺少的重要组成部分.然而传统数据库正趋向巨无霸化,对系统的要求一步步提高,管理成本也越来越大,对于 中小型项目的应用,它的很多功能变得越来越多余,但是我却不得不为这些不需要的功能付出更多的资金和人力成本. 在这些场景,嵌入式数据库的轻量,零部署,跨平台,义移植,无疑有着传统数据库无可比拟的优点,当然为此我们必须放弃高容量,高性能,高并发,不过谁在乎 这些呢?我们只是中小型应用而已,大小不上百万,并发不超万^_^.

在.Net中,我们可以选择的嵌入式数据库还是挺多的,db4o ,sqlite , 各种xml db. 我之前更倾向于使用db4o,db4o对于用传统ADO.Net驱动的开发有更多的优势,无需手动Mapping,零SQL.不过整因为db4o做了很多 处理,所以在数据持久化的过程中,我们能干预的也很少,而db4o在复合属性,级联属性,特别当整个系统使用富领域模型设计的时候,保存数据的时候往往会 出错.为此我们不得不自己手工持久化复合对象中的各个对象,增加关联字段进行关联,这样一来就越加靠近SQL Server之类的传统数据库的时候,显得名不符实.而在web应用中,为了提供并发的能力,还必须使用server/client的模式进行数据传输. 总让我感觉有那么点点别扭.

自从DLINQ出来之后,我的项目越来越依赖于它,它让我们的程序更加优雅清晰,再也不用无聊的拼凑一段又一段的sql,编写一遍又遍的配置.可惜 的是MS只提供LINQ TO SQL(MS SQL SERVER)的实现. 还好LINQ思想出现之后,社区里涌现了各种各样的LINQ Provider程序,大有一切皆LINQ的架势(LINQ TO Everything),SQLite自然不例外.今天我们进来唠唠如何将SQLite引入我们的开发.

ADO.Net Provider&LINQ Provider

首先,下载SQLite的LINQ Provider,在网上我们可以找到两个LINQ Provider For SQLite. 一个是phxsoftwareSystem.Data.SQLite ,另一个是devartdotConnect for SQLite . System.Data.SQLite是开源产品,而dotConnect For SQLite是商业产品(有个一个免费普通版本).我们这里选择System.Data.SQLite作为我们的LINQ Provider.

从Sourceforge下载SQLite-1.0.60.0-setup.exe ,然后安装.结束的时候,会让你Install SQLite Design-Time Support,把里面的VS2005/VS2008 都打上勾

 

这样子你就可以在VS的Server Explorer里面像管理SQL Server的数据库一样管理你的SQLite数据库文件.安装完之后,我们得到以下文件

 

创建数据库

要创建一个空的SQLite数据库,可以选择两种方式.

1. 从http://www.sqlite.org/download.html 下载Window下的程序(http://www.sqlite.org/sqlite-3_6_19.zip ),然后通过命令行创建.

 

  • .db3后缀名可以任意,你也可以使用其他的任意后缀名.
  • 在sqlite>的shell下,必须输入什么,如果直接.exit退出的话,数据库文件将不会被创建

2.从http://www.sqlite.org/cvstrac/wiki?p=ManagementTools 下载各种GUI程序.

数据库文件创建好了之后,拷贝到你想要的位置,然后打开VS的Server Explorer(当然如果你使用GUI程序,你就不需要VS的这个功能了),我们可以在里面维护表信息

 

 

 

我们先设计两个表,以便继续下面的步骤.

 

创建项目

 

创建DataContext

当你将表拉入dbml的时候,会得到如下错误"The selected object(s) use an unsupported data provider."

 

dbml designer和DLINQ一样,微软只实现了For SQL SERVER的功能,其他数据库都没实现.既然不能生成dmbl,那我们生成code就好了,反正这个layout我们一般也没什么用.找到从windows sdk目录下找到Code Generation Tool (SqlMetal .exe) . 不幸的是,这个东东也只支持MS本家的东西,而且不支持Generator扩展-_-!!!.

既然phxsoftware 提供的LINQ Porivder,说不定有提供自定义的代码生成工具.不过看来看去,发现只支持Entity Frameworkd Entity Model的生成,但是没有LINQ TO SQLite的支持(dotConnect for SQLite 倒是对二者都支持).

难道我们要手动编写DataContext?怎么可能,肯定有人实现了,google下,找到了一个DLINQ2007 的 项目,提供好多LINQ Provider的实现(包括SQLite).发现里面有个DbMetal.exe,支持从SQLite生成DataContext类.虽然不如MS的的 完美,不过能自动生成基本的DataContext,这就是最大的收获,不然像我这么依赖LINQ的人只好放弃SQLite了 ^_^.DbMetal.exe生成DataContext的命令行,类似SqlMetal.exe.

D​b​M​e​t​a​l​.​e​x​e​ ​/​d​a​t​a​b​a​s​e​:​T​e​s​t​D​a​t​a​C​o​n​t​e​x​t​ ​ ​/​s​c​h​e​m​a​ ​/​n​a​m​e​s​p​a​c​e​=​L​i​n​q​T​o​S​Q​L​i​t​e​
​ ​/​s​p​r​o​c​s​ ​/​e​n​t​i​t​y​I​n​t​e​r​f​a​c​e​s​=​ ​/​c​u​l​t​u​r​e​=​"​e​n​"​ ​ ​/​c​o​d​e​=​T​e​s​t​.​c​s​ ​/​p​r​o​v​i​d​e​r​=​S​q​l​i​t​e​ ​
​ ​/​c​o​n​n​=​"​d​a​t​a​ ​s​o​u​r​c​e​=​D​:​/​d​o​c​/​m​y​/​d​a​t​a​/​c​o​d​e​/​L​i​n​q​T​o​S​Q​L​i​t​e​/​d​l​l​s​/​T​e​s​t​.​d​b​3​"

/database指定类名, /namespace=LinqToSQLite指定命名空间...,具体的参数可以在命令行下获取到(dbmetal.exe /?).

不过这个DbMetal.exe一样不完善,不是什么结构都可以生成,比如数据库带有外键的话,生成就会出错.

 

生​成​后​的​代​码​大​概​如​下​(​可​能​需​要​手​工​清​理​下​S​y​s​t​e​m​T​a​b​l​e​的​对​应
的​c​l​a​s​s​)​:
p​u​b​l​i​c ​p​a​r​t​i​a​l​ c​l​a​s​s ​T​e​s​t​D​a​t​a​C​o​n​t​e​x​t​ ​:​ ​D​b​L​i​n​q​.​D​a​t​a​.​L​i​n​q​.​D​a​t​a​C​o​n​t​e​x​t
​{
p​u​b​l​i​c ​T​e​s​t​D​a​t​a​C​o​n​t​e​x​t​(​S​y​s​t​e​m​.​D​a​t​a​.​I​D​b​C​o​n​n​e​c​t​i​o​n​ ​c​o​n​n​e​c​t​i​o​n​)​:​ b​a​s​e (​c​o​n​n​e​c​t​i​o​n​,​ ​ ​ ​ n​e​w ​D​b​L​i​n​q​.​S​q​l​i​t​e​.​S​q​l​i​t​e​V​e​n​d​o​r​(​)​)
​{
​}
p​u​b​l​i​c ​T​e​s​t​D​a​t​a​C​o​n​t​e​x​t​(​S​y​s​t​e​m​.​D​a​t​a​.​I​D​b​C​o​n​n​e​c​t​i​o​n​ ​c​o​n​n​e​c​t​i​o​n​,​ ​ ​ ​ ​D​b​L​i​n​q​.​V​e​n​d​o​r​.​I​V​e​n​d​o​r​ ​v​e​n​d​o​r​)​:​ b​a​s​e (​c​o​n​n​e​c​t​i​o​n​,​ ​v​e​n​d​o​r​)
​{
​}
p​u​b​l​i​c ​T​a​b​l​e​ ​O​r​d​e​r​ ​{​ g​e​t ​{​ r​e​t​u​r​n ​G​e​t​T​a​b​l​e​(​)​;​ ​}​ ​}
p​u​b​l​i​c ​T​a​b​l​e​ ​O​r​d​e​r​I​t​e​m​ ​{​ g​e​t ​{​ r​e​t​u​r​n ​G​e​t​T​a​b​l​e​(​)​;​ ​}​ ​}​
​}​

 

演示代码和相关的dlls下载:http://cid-af3411fff50fdeaa.skydrive.live.com/self.aspx/Public/Demo/LinqToSQLite.rar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值