您的位置:首页 > 其它

db4o Tutorial 中文翻译(七)

2007-05-06 12:19 295 查看

5. 集合和数组

我们将要通过增加Sensor类到Car类,来慢慢转移到实时数据处理

using System;
using System.Text;

namespace Db4objects.Db4o.Tutorial.F1.Chapter3

一个Car在需要记录他的比赛情况的时候,可以产生他目前的Sensor Readout :

using System;
using System.Collections;

namespace Db4objects.Db4o.Tutorial.F1.Chapter3

我们现在只要加静态的数据,下一个章节就要加入更灵活的数据了。

5.1. 存储数据

现在你应该很熟悉这个步骤了吧!

// storeFirstCar
Car car1 = new Car("Ferrari");
Pilot pilot1 = new Pilot("Michael Schumacher", 100);
car1.Pilot = pilot1;
db.Set(car1);

第二个Car我们要加入2个snapshots:

// storeSecondCar
Pilot pilot2 = new Pilot("Rubens Barrichello", 99);
Car car2 = new Car("BMW");
car2.Pilot = pilot2;
car2.Snapshot();
car2.Snapshot();
db.Set(car2);

5.2. 检索

5.2.1. QBE

首先,要确定snapshots是否被真的加入了.

// retrieveAllSensorReadout
IObjectSet result = db.Get(typeof(SensorReadout));
ListResult(result);
注意:原型中给定元素的实际位置是错的。
为了根据一个car的sensor readouts来检索car,我们要记录查看历史

// retrieveCarQBE
IList protoHistory = new ArrayList();
protoHistory.Add(protoReadout);
Car protoCar = new Car(null, protoHistory);
IObjectSet result = db.Get(protoCar);
ListResult(result);
我们也可以检索集合本身,因为他们也是对象

// retrieveCollections
IObjectSet result = db.Get(new ArrayList());
ListResult(result);

这对array不起作用:

// retrieveArrays
ListResult(result);

5.2.2. Native Queries

如果你想用 Native Queries 来通过匹配来查找SensorReadouts, 和检索单个值(非集合、数组),是一样的:

public class RetrieveSensorReadoutPredicate : Predicate
// retrieveSensorReadoutNative
IObjectSet results = db.Query(new RetrieveSensorReadoutPredicate());
ListResult(results);

这里是根据匹配的readout 来查找car:

public class RetrieveCarPredicate : Predicate
// retrieveCarNative
IObjectSet results = db.Query(new RetrieveCarPredicate());
ListResult(results);

5.2.3. 检索 API

对arrays and collections操作类似上面的例子. 首先,我们只用匹配值检索 SensorReadouts :

// retrieveSensorReadoutQuery
IQuery query = db.Query();
query.Constrain(typeof(SensorReadout));
IQuery valueQuery = query.Descend("_values");
valueQuery.Constrain(0.3);
valueQuery.Constrain(0.1);
IObjectSet results = query.Execute();
ListResult(results);
然后,我们根据匹配的 Readout 检索car:

// retrieveCarQuery
IQuery query = db.Query();
query.Constrain(typeof(Car));
IQuery historyQuery = query.Descend("_history");
historyQuery.Constrain(typeof(SensorReadout));
IQuery valueQuery = historyQuery.Descend("_values");
valueQuery.Constrain(0.3);
valueQuery.Constrain(0.1);
IObjectSet results = query.Execute();
ListResult(results);

5.3. 更新和删除

应该很熟悉了吧,我们只需要设置car的更新深度:

// updateCarPart1
Db4oFactory.Configure().ObjectClass(typeof(Car)).CascadeOnUpdate(true);

// updateCarPart2
IObjectSet result = db.Get(new Car("BMW", null));
Car car = (Car)result.Next();
car.Snapshot();
db.Set(car);
RetrieveAllSensorReadouts(db);

当删除arrays and collections时候没有什么不同的。
从一个集合中删除对象也是一样的。

// updateCollection
IQuery query = db.Query();
query.Constrain(typeof(Car));
IObjectSet result = query.Descend("_history").Execute();
IList history = (IList)result.Next();
history.RemoveAt(0);
db.Set(history);
Car proto = new Car(null, null);
result = db.Get(proto);
foreach (Car car in result)
// deleteAllPart1
Db4oFactory.Configure().ObjectClass(typeof(Car)).CascadeOnDelete(true);

// deleteAllPart2
IObjectSet result = db.Get(new Car(null, null));
foreach (object car in result)
IObjectSet readouts = db.Get(new SensorReadout(null, DateTime.MinValue, null));
foreach (object readout in readouts)
锘縰sing System;
using System.Collections;
using System.IO;
using Db4objects.Db4o;
using Db4objects.Db4o.Query;
namespace Db4objects.Db4o.Tutorial.F1.Chapter3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: