LINQ TO SQLite实践指南

LINQ TO SQLite实践指南,第1张

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

 前言

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

  在.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.sqlite@R_301_6658@or())
  {
  }
  public TestDataContext(System.Data.IDbConnection connection,Dblinq.@R_301_6658@or.I@R_301_6658@or @R_301_6658@or)
  : base(connection,@R_301_6658@or)
  {
  }
  public table Order { get { return Gettable(); } }
  public table OrderItem { get { return Gettable(); } }
  }


原文出处:http://www.cnblogs.com/walkingboy/archive/2009/10/27/1590988.html
TechTarget中国原创内容,原文链接:http://www.searchdatabase.com.cn/showcontent_28061.htm

总结

以上是内存溢出为你收集整理的LINQ TO SQLite实践指南全部内容,希望文章能够帮你解决LINQ TO SQLite实践指南所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1175712.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存