1

我正在尝试使用 DB4O 构建一个新的 Web 应用程序——从中学到了很多有趣的东西和一些非常有趣的东西。我正在努力解决的一件事是 DB4O 目前缺乏对无状态应用程序(即,主要是 Web 应用程序)的支持以及对自动生成 ID 的需求。

有许多创造性和有趣的方法,我已经能够找到与DB4O 事件挂钩的方法使用 GUID 而不是数字 ID,或者出于任何原因完全避免使用任何 ID 系统。

虽然每种方法都有其优点,但我想知道不太优雅的方法是否同样是最合适的。考虑以下伪代码:

If ID == 0 or null
Set ID = (typeof(myObject)).Count
myObject.Save

这似乎是一种非常简单的方法,通常在这里我开始思考,“我错过了一些非常明显的东西”。我有没有?

4

2 回答 2

1

您需要在计数之前锁定 myObject 的插入和删除,直到保存之后

于 2010-05-08T08:26:54.343 回答
1

新的db4o-extras 项目包含一个 AutoIncrementID 支持插件。该项目刚刚开始,我还没有发布编译好的二进制文件。但它通过使用单个属性增加了对“身份”列或自动递增 ID 字段/属性的支持。

[AutoIncrement]
public property int ID {get; private set;}

[AutoIncrement]
protected int _id;
public property int ID {
  get{return _id;}
  set{this._id = value;}
}
于 2010-10-08T18:34:18.397 回答