终于把这篇文章发出来了. 对于Windows Phone 7 Visit Local DataBase新采用DB4O和SiaqoDB方式来验证 本地数据访问. 其实这篇已经在上周 完成一个大概草稿. 中间再CodePlex看到一个Dvp写的一段关于Perst数据库使用心得 回过头一看又觉得自己写的有些关于SiaqoDB细节上有失严谨. 于是乎又不断查看多方资料来反复利用实际编程的方式来验证. 可惜的是这方面资料基本没有,对于某些想法只能动手尝试 ok let’s get start!……

关于Windows Phone 7 本地数据库访问的选择 JackLin 已经完整的总结了一篇文章浅谈Windows Phone 7本地数据库的选择. 而今天我的工作就是验证他在这文章中提出的DB4O和SiaqoDB两种访问方式. 至于文中提到的EffiProz Database/Windows Phone DataBase/Sqlite for Windows Phone 7 三种方式已经前两篇完整验证. 可以参考.

对于这个DB40, 我也是很偶尔中看到. 起初对于这个纯开源的面向对象的数据引擎 没有太过重视. 关于WP7本地数据访问我先测试SQlite和Effoproze . 但是使用完DB4O不得不说它本身特点相比其他开源数据库非常突出:

A:在官方[DB4O WebSite]的宣传语中就说到We are Free. DB4O的完全靠的开源社区的驱动力量来进行开发. 意味它是免费的.

B:原生数据库: 为什么说是原生.db4o 是 100% 原生的面向对象数据库,直接使用编程语言来操作数据库。程序员无需进行 OR 映射来存储对象,大大节省了程序员在存储数据的开发时间, 这让我想到Rails框架中ORM映射和.NET从java翻版过来的Nhibernate. 想想我们以前做OO编程时 把一个面向对象的类存储到关系型数据库中 总是难以避免走到这一步.

ORM层将数据库表映射到类, 将表中记录映射成一个实例对象. 将字段映射成对象的属性.类方法则对应做的是表级别的操作, 实例方法则用于执行对单条记录的操作. 这样直接对OO 操作的数据持久化操作 业界对Nhibernate性能上担忧 但DB4O 在性能上如何?

C:高性能: db4o 官方公布的基准测试数据,db4o 比采用 Hibernate/MySQL 方案在某些测试线路上速度高出 44 倍之多. 更多相关测试请参考官方[DB4O WebSite]文档.

D:易签入.使用 db4o 仅需引入 400 多 k 的 jar 文件或是 dll 文件,内存消耗极小 无需管理 而且跨平台.

大概介绍DB40特点 下面快速进度WP7开发去体验一番.

在进行DB40 For Windows pheon 7开发前需要下载DB4O开源组件:

下载地址.NEt 3.5版本:DB40 Download Link[DB4O 7.12 For .NEt 3.5]

下载完成后自动安装. 会在系统C盘符上生成一个目录. ok let’s Create new WP7 Application For Test:

<2.1>添加引用

测试项目TestDB4OLocalDemo 创建完成后 需要添加引用, 找到DB4O默认安装目录:

C:\Program Files\db4o\db4o-7.12\bin\net-3.5

下添加Db4objects.Db4o.DLLDb4objects.Db4o.Linq.DLL引用:

引用结果:

添加引用完成后后台页面引入:

  1. //添加引用
  2. using Db4objects.Db4o;
  3. using Db4objects.Db4o.IO;
  4. using Db4objects.Db4o.Query;
  5. using Db4objects.Db4o.Linq;

为了达到演示目的 将先在WP7界面实现DB4O数据库基本的CRUD操作, 这时我们需要一个操作实体对象Customer类 定义如下:

  1. /// <summary>
  2. /// 定义数据承载实体信息Customer
  3. /// Author:chenkaiDate:2010年9月24日10:25:38
  4. /// </summary>
  5. publicclass Customer
  6. {
  7. publicintId { get;set; }
  8. publicstring CustomerName { get;set; }
  9. publicstring CustomerPhone { get;set; }
  10. publicintAge { get;set; }
  11. publicDateTime CreateDate { get;set; }
  12. }

WP7界面我们先初始化数据,然后根据CustmerName属性查询数据, 删除操作则对应CustomerID来删除,演示界面:

来看一下后台文件关于DB4O数据库初始化时插入数据具体操作,当开始第一次运行时 提示一个异常信息:

提示的意思是我们目前的.NET版本不对. 注意目前DB4O数据在官方中下载文件对应.NEt两个版本.2.0和3.5 这是7.12版本,所以在建立WP7时把默认的.NET 4.0更改为3.5 , 如果当修改WP7.NEt版本为对应的版本后依然提出这个问题.这个问题困扰我好一阵终于在WeAsk-上找到类似问题 来看一下我打开一个DB4O数据库文件的操作代码:

  1. //打开并自动创建一个TESt.DB4O文件
  2. string dbfilepath = @"E:\DB4o\test.db4o";
  3. IObjectContainer getdb40 = Db4oEmbedded.OpenFile(Db4oEmbedded.NewConfiguration(), dbfilepath);

这个问题困扰我好一阵.后来在Weask上问了Grouper 当我们通过OpenFile自动创建一个固定路径上的DB4O文件,DB4O对于.NET版本的嵌入式开发需要特殊的配置.Db4oEmbedded.NewConfiguration()实现的是 IEmbeddedConfiguration接口.IEmbeddedConfiguration接口包含了在嵌入式模式下具体配置的方法.所以在NewConfiguation()需要配置Config中适用的范围即ConfigScope.

  1. /// <summary>
  2. /// Configuation The DB4O
  3. /// </summary>
  4. publicstaticIEmbeddedConfiguration ConfigureReplication()
  5. {
  6. IEmbeddedConfiguration db4oConfig = Db4oEmbedded.NewConfiguration();
  7. db4oConfig.File.GenerateUUIDs = ConfigScope.Globally;
  8. db4oConfig.File.GenerateVersionNumbers = ConfigScope.Globally;
  9. returndb4oConfig;//(IConfiguration)
  10. }

问题依然存在. 执行到Db4oEmbedded.NewConfiguration()时依然会提示一个同样的.NET版本异常. 这个问题困扰我一个上午.看一下按钮事件中完整代码:当初始化数据时通过后台添加3条记录并查询DB4O中数据记录数量是否为 3 判断插入数据是否成功 代码如下:

  1. private void ReadlyDate_Click(object sender, RoutedEventArgs e)
  2. {
  3. //创建数据库
  4. try
  5. {
  6. string dbfilepath = @"E:\DB4o\test.db4o";
  7. string getfilepath=@"testdb.db4o";
  8. //IObjectContainer getdb40 = Db4oEmbedded.OpenFile(MainPage.ConfigureReplication(), getfilepath);
  9. //Db4oEmbedded.NewConfiguration
  10. IEmbeddedConfiguration configuration = Db4oEmbedded.NewConfiguration();
  11. configuration.File.GenerateUUIDs=ConfigScope.Globally;
  12. configuration.File.GenerateVersionNumbers=ConfigScope.Globally;
  13. IObjectContainer getdb40 = Db4oEmbedded.OpenFile(configuration, getfilepath);
  14. List<Customer> initialCustomerlist = new List<Customer>
  15. {
  16. new Customer{ Id=1002, CustomerName="chenkai", CustomerPhone="052-854652", Age=28, CreateDate=DateTime.Now},
  17. new Customer{ Id=1003, CustomerName="jackchen", CustomerPhone="014-778546",
  18. new Customer{ Id=1004, CustomerName="markDinel", CustomerPhone="062-634652", Age=28, CreateDate=DateTime.Now},
  19. };
  20. //inserttoDB4o
  21. if (initialCustomerlist.Count> 0)
  22. {
  23. this.listBox1.Items.Clear();
  24. foreach (Customer getcustomerininitialCustomerlist)
  25. {
  26. //插入数据
  27. getdb40.Store(getcustomer);
  28. this.listBox1.Items.Add(getcustomer.CustomerName +"已存储!");
  29. }
  30. }
  31. //cofrim 是否插入成功  查询数据
  32. Customer typecutomer = new Customer();
  33. IObjectSet getobjset = getdb40.QueryByExample(typecutomer);
  34. if (getobjset.Count== 3)
  35. {
  36. MessageBox.Show("数据插入成功!");
  37. }
  38. else
  39. {
  40. MessageBox.Show("数据插入失败!");
  41. }
  42. //Close操作
  43. getdb40.Close();
  44. }
  45. catch (Exception se)
  46. {
  47. MessageBox.Show("初始化DB4O数据时出现异常:"+ se.Message);
  48. }
  49. }

目前遇到问题是WP7 引用DB4O后在Windows Phone 7 Application中提示一个.NET FrameWork版本异常?始终无法解决.

经过一番很费力的查找在官方开发者论坛同样有人遇到这样的问题. .NEt FrameWork Version Problem?? 但是他是在进行AND移动程序和Desklop桌面程序数据进行同步时.

在DB4O官方对开发者对应下载页面: [Developer Download Link] 对DB4O存在多个下载版本:

可下载适用DB4O多个版本[只看.NEt支持]:

DB40 For .NET 2.0/3.5 Version:7.12.156

DB40 For .NET 2.0/3.5 Version:7.4.155

DB40 For .NET 2.0/3.5/4.0 Version:8.0.156

大概查看一下Version 8.0之间 的Realse Note: 查看最新的Release Notes 8.0.156:

COR-1339 - Check db4o against latest Silverlight SDK

等于说在最新的支持.NEt 4.0的DB4O 8.0中对Silverlight支持. 我们再来查看相关个DB40关于Silverlight和Windows Phone支持详细文档:

[db4o - Silverlight based RIA datastore]

[db4o - Windows Phone database]

DB4O对Windows Phone支持中明确提到:

.NET 4.0 support and Silverlight version

db4o now supports .NET 4.0 and has been ported to Silverlight! In order to get it you just need to download the .NET installer.

DB4O现在已经支持.NEt 4.0版本 这样一来基本目前所有的.NEt版本DB4O都已经支持. 不过对Silverlight最新版本支持正在开发. 目前DB4O对Silverlight支持版本为Silverlight 3. DB4O可以免费使用在任何的Windows Phone 设备程序中. 那应该我们对应支持版本有问题 下载最新的DB4O8.0 版本[需要注册]:

[DB40 Last Version 8.0 Download link db4o for .NET 4.0, version 8.0.160.14822 ZIP]

在DB4O官方注册用户有一个很怪现象 只要你的机器装了.NEt 4.0 在提交用户信息后始终会提示一个运行时异常 :

导致无法 注册 后来我通过一个同事在java开发环境注册成功.

下载完成后 打开Bin目录可以看到其中已经集成对Silverlight 3支持:

重新建立一个WP7 Application 选择的.NET版本为.NET 4.0 引用DB4O版本为8.0 其他均不做修改 运行提示如下:

调用Db4oEmbedded.NewConfiguration()时 无法找到NewConfiguartion()方法 或提示尝试访问该方法调用失败.

天啊 DB4O真是如此的折磨人!.我分别用了不同.NEt版本来测试同一个DB4O版本 结果还是无功而返. 我顺便产看官方给出演示Demo实例. 可惜没有关于Windows Phone 7的相关Demo. 从刚开始提示.NET版本问题到现在NewConfiguation()方法无法访问. 希望碰到相关问题或是对DB4O基于WP7本地数据访问已经成功案例 能够共享出来.

很遗憾 我利用假期又做了其他版本的尝试 结果还是一样. 关于DB4O在Windows Phone 7上的本地数据访问 测试失败.

DB4O在WP7我测试访问本地数据没有成功.官方明确提示是对Windows mobile 6.0/6.5都是支持的. 当然在DB4O相对其他开源第三方的数据 很有特点. 现在已经有很多企业把DB4O作为开发的底层数据交互对象来进行考虑. 关于这个WP7问题 我们一直无法解决. 当然不是说没有替代方法. 可以在WP7程序建立一个数据服务层用.NET类库实现对数据库DB4O访问 然后留用WCF服务的方式对外发布访问接口 在由WP7引用服务即可访问. 如果哪位有更好的方法方式来解决这个问题. 请在留言中提出…………

参考资料:

DB4O 7.0 中文参考指南[Java版本文档 有教程] 对照翻译版

WeAsk-DB4O use in Windows Phone

Silverlighti and DB4O UserFrom

DataBase in WindowsPhone

本文转自chenkaiunion 51CTO博客,原文链接:http://blog.51cto.com/chenkai/764484

多样化实现Windows Phone 7本地数据访问3——DB4O相关推荐

  1. 多样化实现Windows phone 7本地数据访问5——深入Rapid Repository

    上一篇多样化实现Windows Phone 7本地数据访问<4>--Rapid Repository  中初步的介绍Repid Repository作为Windows phone 7数据库 ...

  2. [转载]Windows Phone 系列- 本地数据存储

    http://www.cnblogs.com/sunjunlin/category/356304.html Windows Phone 应用程序可以使用独立存储将数据储存到手机本地.应用程序可以通过三 ...

  3. Windows系统启动MongoDB本地可以访问,远程连接不上问题

    我在windows系统上安装了mongodb之后,本地测试了一下,可以连接上,但是远程访问时候发现连接被拒绝.网上百度说是配置文件默认只能访问本地,需要改mongod.cfg配置文件.然而改了之后重启 ...

  4. 数据访问模式二:数据集和数据适配器(传统的数据访问模式)

    上一篇文章介绍了使用DataSource控件访问数据库的过程,本节介绍利用数据适配集/数据适配器的访问数据库.这两种设计模式的差别,使得GridView的设计即要支持DataSource控件的数据绑定 ...

  5. windows mobile开发循序渐进(4)移动应用程序的数据存储之本地数据存储第二篇

    之所以分解来写,是因为在写的过程中会有些穿插的工作,希望能够尽量写的更细节一些. 上篇说的是本地存储的XML和DataSet之间的交互,现在我们来看看windows mobile 是如何与数据库进行交 ...

  6. 如何在本地数据中心安装Service Fabric for Windows集群

    概述 首先本文只是对官方文档(中文,英文)的一个提炼,详细的安装说明还请仔细阅读官方文档. 虽然Service Fabric的官方名称往往被加上Azure,但是实际上(估计很多人不知道)Service ...

  7. Windows 8 应用开发 - 本地数据存储

    原文:Windows 8 应用开发 - 本地数据存储 在应用中通常会遇到用户主动或被动存储信息的情况,当应用关闭后这些数据仍然会存储在本地设备上,用户下次重新激活应用时会自动加载这些数据.下面将通过一 ...

  8. 与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密...

    原文:与众不同 windows phone (28) - Feature(特性)之手机方向, 本地化, 应用程序的试用体验, 系统主题资源, 本地数据的加密解密 [索引页] [源码下载] 与众不同 w ...

  9. Silverlight入门:第三部分 - 数据访问

    现在我们已经有了一个基础布局,同时也在上面放了一些控件,接下来让我 们开始获取数据.因为我们想要搜索Twitter上的内容,所以我们需要充分使用 他们提供的Web服务API.在继续之前,我要先说明在本 ...

最新文章

  1. “编程不规范,同事两行泪!”
  2. python处理excel表格实例-使用Python操作excel文件的实例代码
  3. 使用ASP.NET 2.0提供的WebResource管理资源
  4. C++中const用法总结
  5. mysql insert 几分钟_我们可以在MySQL中应用INSERT语句时向VARCHAR日期时间记录添加分钟吗?...
  6. 字符串equal_Java String:字符串常量池
  7. 一步步实现SDDC-双节点VSAN部署
  8. dplayer js控制 自动全屏_vue 中使用video.js 实现m3u8视频播放格式
  9. 日调度5万亿次 腾讯云微服务架构体系TSF深度解读
  10. android listview 分页
  11. redis数据类型之sorted set
  12. linux内核启动的优化
  13. 腾讯云服务器安装AMH控制面板
  14. 51单片机(1)-开发工具介绍及软件安装
  15. android appium 原理,天天使用Appium,但是你真的理解Appium的工作原理吗
  16. iOS逆向之微信和支付宝修改步数 简洁无脑版
  17. 大前研一/聰明人必做的十件事
  18. android 微信浮窗实现_Android 悬浮窗功能的实现
  19. 常用颜色的RGB值及中英文名称
  20. js中undefined

热门文章

  1. 基于float的几种布局
  2. WPF学习笔记 - 不一样的皇帝的新衣
  3. 活动目录实战系列三(建立子域)
  4. maven provided
  5. python 学习DAY03
  6. modernizr.js的介绍和使用
  7. Bootstrap-模态框 modal.js
  8. 2014-2-28 思杨的语言能力
  9. ELF文件格式详解-请查收
  10. php目的,php umask(0)的目的是什么