本文共 6233 字,大约阅读时间需要 20 分钟。
终于把这篇文章发出来了. 对于Windows Phone 7 Visit Local DataBase新采用DB4O和SiaqoDB方式来验证 本地数据访问. 其实这篇已经在上周 完成一个大概草稿. 中间再CodePlex看到一个Dvp写的一段关于Perst数据库使用心得 回过头一看又觉得自己写的有些关于SiaqoDB细节上有失严谨. 于是乎又不断查看多方资料来反复利用实际编程的方式来验证. 可惜的是这方面资料基本没有,对于某些想法只能动手尝试 ok let’s get start!……
关于Windows Phone 7 本地数据库访问的选择 JackLin 已经完整的总结了一篇文章. 而今天我的工作就是验证他在这文章中提出的DB4O和SiaqoDB两种访问方式. 至于文中提到的EffiProz Database/Windows Phone DataBase/Sqlite for Windows Phone 7 三种方式已经前两篇完整验证. 可以参考.
对于这个DB40, 我也是很偶尔中看到. 起初对于这个纯开源的面向对象的数据引擎 没有太过重视. 关于WP7本地数据访问我先测试SQlite和Effoproze . 但是使用完DB4O不得不说它本身特点相比其他开源数据库非常突出:
A:在的宣传语中就说到We are Free. DB4O的完全靠的开源社区的驱动力量来进行开发. 意味它是免费的.
B:原生数据库: 为什么说是原生.db4o 是 100% 原生的面向对象数据库,直接使用编程语言来操作数据库。程序员无需进行 映射来存储对象,大大节省了程序员在存储数据的开发时间, 这让我想到Rails框架中ORM映射和.NET从java翻版过来的Nhibernate. 想想我们以前做OO编程时 把一个面向对象的类存储到关系型数据库中 总是难以避免走到这一步.
ORM层将数据库表映射到类, 将表中记录映射成一个实例对象. 将字段映射成对象的属性.类方法则对应做的是表级别的操作, 实例方法则用于执行对单条记录的操作. 这样直接对OO 操作的数据持久化操作 业界对Nhibernate性能上担忧 但DB4O 在性能上如何?
C:高性能: db4o 官方公布的基准测试数据,db4o 比采用 Hibernate/方案在某些测试线路上速度高出 44 倍之多. 更多相关测试请参考文档.
D:易签入.使用 db4o 仅需引入 400 多 k 的 文件或是 文件,内存消耗极小 无需管理 而且跨平台.
大概介绍DB40特点 下面快速进度WP7开发去体验一番.
在进行DB40 For Windows pheon 7开发前需要下载DB4O开源组件:
下载地址.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.DLL和Db4objects.Db4o.Linq.DLL引用:
引用结果:
添加引用完成后后台页面引入:
为了达到演示目的 将先在WP7界面实现DB4O数据库基本的CRUD操作, 这时我们需要一个操作实体对象Customer类 定义如下:
WP7界面我们先初始化数据,然后根据CustmerName属性查询数据, 删除操作则对应CustomerID来删除,演示界面:
来看一下后台文件关于DB4O数据库初始化时插入数据具体操作,当开始第一次运行时 提示一个异常信息:
提示的意思是我们目前的.NET版本不对. 注意目前DB4O数据在官方中下载文件对应.NEt两个版本.2.0和3.5 这是7.12版本,所以在建立WP7时把默认的.NET 4.0更改为3.5 , 如果当修改WP7.NEt版本为对应的版本后依然提出这个问题.这个问题困扰我好一阵终于在上找到类似问题 来看一下我打开一个DB4O数据库文件的操作代码:
这个问题困扰我好一阵.后来在Weask上问了Grouper 当我们通过OpenFile自动创建一个固定路径上的DB4O文件,DB4O对于.NET版本的嵌入式开发需要特殊的配置.Db4oEmbedded.NewConfiguration()实现的是 IEmbeddedConfiguration接口.而IEmbeddedConfiguration接口包含了在嵌入式模式下具体配置的方法.所以在NewConfiguation()需要配置Config中适用的范围即ConfigScope.
问题依然存在. 执行到Db4oEmbedded.NewConfiguration()时依然会提示一个同样的.NET版本异常. 这个问题困扰我一个上午.看一下按钮事件中完整代码:当初始化数据时通过后台添加3条记录并查询DB4O中数据记录数量是否为 3 判断插入数据是否成功 代码如下:
目前遇到问题是WP7 引用DB4O后在Windows Phone 7 Application中提示一个.NET FrameWork版本异常?始终无法解决.
经过一番很费力的查找在官方开发者论坛同样有人遇到这样的问题. 但是他是在进行AND移动程序和Desklop桌面程序数据进行同步时.
在DB4O官方对开发者对应下载页面: 对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
大概查看一下: 查看最新的:
- Check db4o against latest Silverlight SDK
等于说在最新的支持.NEt 4.0的DB4O 8.0中对Silverlight支持. 我们再来查看相关个DB40关于Silverlight和Windows Phone支持详细文档:
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 版本[需要注册]:
在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引用服务即可访问. 如果哪位有更好的方法方式来解决这个问题. 请在留言中提出…………
参考资料:
本文转自chenkaiunion 51CTO博客,原文链接:http://blog.51cto.com/chenkai/764484
转载地址:http://elnca.baihongyu.com/