将System.Data.SQLite和ADO.NET(WCF) Data Service双剑合璧

有关System.Data.SQLite,可以参见我前的介绍博客。可是本的行版本1.0.65(2009年十月26日发布),相对此前的本提供了之类新特色:

  • 包装了sqlite 3.6.16
  • 支持.NET 3.5 SP1
  • 支持Mono
  • 襄助VS2008(其实若您安装了2010的说话,也匡助的)设计器:数据库管理器,Typed
    DataSet(类型化数据集)设计器,EDM(实体数据模型)设计器等
  • 无限要害之是,几乎完全帮助ADO.NET 3.5 Entity
    Framework(实体框架)。有了那么些特性,本文才发存在的意义。

发出了System.Data.SQLite这么强的效能,在少数情形下主题可以代替SQL
Server 2005/2008 Express
  SQL Server Compact Edition了。

于ADO.NET Data 瑟维斯(Service)(Service)我们应该早就熟知了,现在既更名为WCF Data
瑟维斯(Service)了。Entity
Framework及WCF都是超负荷底层的艺,在SmartClient或RIA中支出面向数据驱动的应用程序(EF访问数,WCF直接透露实体和实体操作的方),直接下这简单只技巧如故多依旧少会遭遇不适应之情形,对合开发功效也生影响。为了缓解这样的题材,也以协助流行的REST访问数模式,微软研发了Astoria项目,也即ADO.NET(WCF)数据服务。

于ADO.NET Data
瑟维斯(Service)(Service)的应用,可以参见:http://kb.cnblogs.com/page/43963/Astoria
(ADO.NET Data
Service)客户端操作可以

以出了System.Data.SQLite和ADO.NET Data
瑟维斯(Service)为咱由好之根基之上,我们可以管其合璧在同,发挥还怪的意图。类似的见解,ccBoy也发论——Astoria
to SQLite to Entity Framework to
建立你的ORM观念
。以我当时有限上的尽来拘禁,最可怜之长处如下:

  • 透过动System.Data.SQLite简化服务器端的布局,尤其数据库的布局。即便使用SQL
    Server 2005/2008
    Express的数据库文件之计,也会合遭遇权限(或局部不三不四)的题材。
  • 通过运用ADO.NET Data
    Service(Service)简化数据库的造访,在客户端可平昔编写LINQ查询,而不用局限为为由定义WCF访问接口。也非谋面遇上实体关系处理在Client和Server端的差问题。

自然,要深好之以就半把利剑,需要注意如下事项(以我之推行而言):

  1. 安装:在出机器和布局服务器上都设置SQLite-1.0.65.0-setup.exe。就自我的景而言,开发机器及,会自动添加GAC,而服务器上需要手动添加GAC。并且奇怪的是开发机器及,有MSIL、x86和Intel64底本子,而当服务器上只可以添加x86暨AMD64之版。System.Data.SQLite和System.Data.SQLite.Linq都亟待添加。倘诺以服务器上不上加GAC,那么在服务器上运行,会指示非克加载程序集(我猜是盖System.Data.SQLite.DLL内部统一了sqlite的发动机)。
  2. 出:通过VS的数据库管理器,在sqlite中上加表等。然后新建一个Entity
    Data Model,把表上加到EDM中。新建一个ADO.NET Data
    Service(Service)的服务,修改关联的ObjectContext。配置config.SetEntitySetAccessRule。
  3. 安排:编译配置就AnyCPU。(往日自己遇见有的题目,查看资料说出或用设定为x64或x86,但是由于自己之开机器和服务器都是64之,所以应无是其一问题。相应解释:http://www.cnblogs.com/downcom/archive/2009/10/26/1590120.htmlhttp://sqlite.phxsoftware.com/forums/t/1970.aspxsqlite,,所以若您的开销机器和服务器是未同位的话,需要考虑这种气象)。需要以config文件中加上(在readme中其实暴发道到):

    <system.data>
       <DbProviderFactories>
         <remove invariant=”System.Data.SQLite”/>
         <add name=”SQLite Data Provider”
    invariant=”System.Data.SQLite” description=”.Net Framework Data
    Provider for SQLite” type=”System.Data.SQLite.SQLiteFactory,
    System.Data.SQLite” />
       </DbProviderFactories>
    </system.data>

  4. 布局:部署应该不会师来什么大问题,重假如db文件应当于眼前的运功用户(一般是Network
    瑟维斯(Service)(Service))对该负有读写权限。

自身吧齐传了自身尽的演示代码(其中蕴涵了用于测试EF功能的EFQuery萨姆(Sam)ples),从此地下载

在那几个示例中,也暗含了怎么收获明细数据的艺术,有点儿种植:

  1. LoadProperty形式(即Explicit
    loading):在当选主表中有修数的上,在加载当前目标的仔细表属性,如:dc.LoadProperty(c,”Orders”);
  2. Expand情势(即Eager
    loading):在载入主表数据的时刻,就提前载入明细表的多少

Update(2009-12-28):经自家的试行,Data
瑟维斯(Service)并未对LoadProperty方法开展缓存,每便调用那一个格局仍旧倘若请求服务器,这样处理其实为创立;而Expand格局,在第一次于开行的时刻载入所有数据,也会生缓慢。所以自己指出:主表数据少,而明细表数据差不多之时光,采纳LoadProperty形式;而主表数据多,而明细表数据少之上,对主表分页并使用Expand形式来加载明细表。

网站地图xml地图