资源简介
前言
当前,软件应用程序中,数据库已经成为不可缺少的重要组成部分.然而传统数据库正趋向巨无霸化,对系统的要求一步步提高,管理成本也越来越大,对于中小型项目的应用,它的很多功能变得越来越多余,但是我却不得不为这些不需要的功能付出更多的资金和人力成本. 在这些场景,嵌入式数据库的轻量,零部署,跨平台,义移植,无疑有着传统数据库无可比拟的优点,当然为此我们必须放弃高容量,高性能,高并发,不过谁在乎这些呢?我们只是中小型应用而已,大小不上百万,并发不超万^_^.
在.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. 一个是phxsoftware的System.Data.SQLite,另一个是devart的dotConnect 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.
DbMetal.exe /database:TestDataContext /schema /namespace=LinqToSQLite /sprocs /entityInterfaces= /culture="en" /code=Test.cs /provider=Sqlite /conn="data source=D:\doc\my\data\code\LinqToSQLite\dlls\Test.db3"
/database指定类名, /namespace=LinqToSQLite指定命名空间...,具体的参数可以在命令行下获取到(dbmetal.exe /?).
不过这个DbMetal.exe一样不完善,不是什么结构都可以生成,比如数据库带有外键的话,生成就会出错.
生成后的代码大概如下(可能需要手工清理下SystemTable的对应的class):
public partial class TestDataContext : DbLinq.Data.Linq.DataContext { public TestDataContext(System.Data.IDbConnection connection): base(connection, new DbLinq.Sqlite.SqliteVendor()) { } public TestDataContext(System.Data.IDbConnection connection, DbLinq.Vendor.IVendor vendor): base(connection, vendor) { } public Table Order { get { return GetTable(); } } public Table OrderItem { get { return GetTable(); } } }
代码片段和文件信息
#region Auto-generated classes for TestDataContext database on 2009-10-27 17:13:07Z
//
// ____ _ __ __ _ _
// | _ \| |__ | \/ | ___| |_ __ _| |
// | | | | ‘_ \| |\/| |/ _ \ __/ _‘ | |
// | |_| | |_) | | | | __/ || (_| | |
// |____/|_.__/|_| |_|\___|\__\___|_|
//
// Auto-generated from TestDataContext on 2009-10-27 17:13:07Z
// Please visit http://linq.to/db for more information
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Linq.Mapping;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Text;
using DbLinq.Data.Linq;
using DbLinq.Linq;
using DbLinq.Linq.Mapping;
namespace LinqToSQLite
{
public partial class TestDataContext
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 295424 2008-09-13 20:53 LinqToSQLite\dlls\DbLinq.dll
文件 4788736 2008-09-13 20:54 LinqToSQLite\dlls\DbLinq.Localization.dll
文件 14336 2008-09-13 20:54 LinqToSQLite\dlls\DbLinq.Sqlite.dll
文件 93696 2008-09-13 20:54 LinqToSQLite\dlls\Dbme
文件 2214 2008-05-03 22:16 LinqToSQLite\dlls\Dbme
文件 213 2009-10-27 17:13 LinqToSQLite\dlls\GenerateDataContext.bat
文件 629760 2008-01-18 14:29 LinqToSQLite\dlls\System.Data.SQLite.DLL
文件 174080 2008-10-03 08:36 LinqToSQLite\dlls\System.Data.SQLite.Linq.dll
文件 4762 2009-10-27 17:13 LinqToSQLite\dlls\Test.cs
文件 9216 2009-10-27 17:17 LinqToSQLite\dlls\Test.db3
文件 295424 2008-09-13 20:53 LinqToSQLite\LinqToSQLite\bin\Debug\DbLinq.dll
文件 14336 2008-09-13 20:54 LinqToSQLite\LinqToSQLite\bin\Debug\DbLinq.Sqlite.dll
文件 7680 2009-10-27 17:32 LinqToSQLite\LinqToSQLite\bin\Debug\LinqToSQLite.dll
文件 22016 2009-10-27 17:32 LinqToSQLite\LinqToSQLite\bin\Debug\LinqToSQLite.pdb
文件 629760 2008-01-18 14:29 LinqToSQLite\LinqToSQLite\bin\Debug\System.Data.SQLite.DLL
文件 568 2009-10-27 17:32 LinqToSQLite\LinqToSQLite\Helper.cs
文件 3839 2009-10-27 17:23 LinqToSQLite\LinqToSQLite\LinqToSQLite.csproj
文件 168 2009-10-27 17:14 LinqToSQLite\LinqToSQLite\LinqToSQLite.csproj.user
文件 607 2009-10-27 17:25 LinqToSQLite\LinqToSQLite\obj\Debug\LinqToSQLite.csproj.FileListAbsolute.txt
文件 7680 2009-10-27 17:32 LinqToSQLite\LinqToSQLite\obj\Debug\LinqToSQLite.dll
文件 22016 2009-10-27 17:32 LinqToSQLite\LinqToSQLite\obj\Debug\LinqToSQLite.pdb
文件 3584 2009-10-27 16:02 LinqToSQLite\LinqToSQLite\obj\Debug\TempPE\LingToSQLite.designer.cs.dll
文件 1460 2009-10-27 13:45 LinqToSQLite\LinqToSQLite\Properties\AssemblyInfo.cs
文件 4718 2009-10-27 17:15 LinqToSQLite\LinqToSQLite\Test.cs
文件 1898 2009-10-27 17:14 LinqToSQLite\LinqToSQLite.sln
文件 9216 2009-10-27 17:17 LinqToSQLite\LinqToSQLite.Web\App_Data\Test.db3
文件 295424 2008-09-13 20:53 LinqToSQLite\LinqToSQLite.Web\bin\DbLinq.dll
文件 4788736 2008-09-13 20:54 LinqToSQLite\LinqToSQLite.Web\bin\DbLinq.Localization.dll
文件 14336 2008-09-13 20:54 LinqToSQLite\LinqToSQLite.Web\bin\DbLinq.Sqlite.dll
文件 7680 2009-10-27 17:32 LinqToSQLite\LinqToSQLite.Web\bin\LinqToSQLite.dll
............此处省略34个文件信息
相关资源
-
使用LinqToob
jects操作数组及集合 - 使用LinqToDataSet操作数据集
- Linq to SQL 入门级教程
- slLinqSql
- Sqlite C# AnyCPU X86/X64 32位/64位 自适应
- Sqlite C# AnyCPU X86/X64 32位/64位 自适应
- c#SqliteORM看名称你懂的
- 对SQLite数据库增,删,改,查操纵的
- c#使用Linq实现SQL数据库的增、删、改
- C#调用sqlite库Demo
- C#调用sqlite增删改查样例(含数据库)
- winfrom+sqlite增删改查
- C#操作SQLite数据库系统字典配置工具源
- SQLite操作类
- linq操作数据以及集合
- C# Linq 动态查询条件 的 两种实现方式
- mssql/mysql/oracle/sqlite/access数据库操作和
-
Linq操作xm
l,添加、删除、修改、查 - 用C#实现SQLite 数据库 建表、插入、查
- Linq操作DataSet
- Linq执行SQL语句操作,增、删、改、查
- Winform中实现SqLite分页完整
- SQLite多线程写入 出现锁文件的解决方
- c#调用sqlite自动切换32位和64位
- 动态Linq 查询条件(PredicateExtensions)
- SQLiteHelperTestApp_(Source)_V1.2
- C#SQLite操作类
- C# 实现 登陆注册/省市联动选择 (s
- c#Winform 操作Sqlite
- dapper+linq 入门级框架(HY.DataAccess)
评论
共有 条评论