我正在使用DB4O构建一个新的Web应用程序 - 一堆乐趣和一些非常有趣的东西。我正在努力解决的一件事是DB4O目前缺乏对无状态应用程序(主要是Web应用程序)的支持以及对自动生成ID的需求。
我能够找到许多有创意且有趣的方法hook into DB4O's events,use GUIDs rather than numeric IDs或者出于任何原因避免使用任何ID系统。
虽然每种方法都有其优点,但我想知道不那么优雅的方法是否同样最适合。请考虑以下伪代码:
If ID == 0 or null
Set ID = (typeof(myObject)).Count
myObject.Save
这似乎是一种非常简单的方法,通常在这里,我开始思考,“我错过了一些非常明显的东西”。我有吗?
答案 0 :(得分:1)
您需要在count之前锁定myObject的插入和删除,直到保存
之后答案 1 :(得分:1)
新db4o-extras project包含AutoIncrementID支持加载项。该项目刚刚开始,我还没有发布已编译的二进制文件。但它通过使用单个属性添加了对“Identity”列或自动递增的ID字段/属性的支持。
[AutoIncrement]
public property int ID {get; private set;}
[AutoIncrement]
protected int _id;
public property int ID {
get{return _id;}
set{this._id = value;}
}