0

我曾考虑将 db4o OODBMS 与最近的 Silverlight / RIA 服务项目一起使用,但有一点我可以使用一些建议 - 如何使关联起作用。RIA 服务要求您使用 AssociationAttribute 标记所有关联实体。AssociationAttribute 的构造函数要求您指定实体对关联实体的键,以及关联实体本身的键。

例如,假设我有一个带有 CarID 和 Car 属性的 Racer 类,以及一个带有 ID 属性的 Car 类。我的 Racer 课程看起来像这样:

class Racer
{
    public int ID { get; set; }
    public int? CarID { get; set; }
    [Association("Racer_Car", "CarID", "ID")]
    public Car Car { get; set; }
}

我在使用 db4o(或任何 OODBMS)时看到的问题是外键和主键不存在,也不需要存在 - 结果是我不需要 Racer.CarID 和 Car.ID 属性。要使这项工作与 RIA 服务一起工作,我需要创建自己的唯一密钥,我不介意,我只是不知道这样做的最佳方法。

所以我的问题是“你将如何创建这些密钥/ID”?

由于没有任何自动递增生成字段的概念(我不知道任何方式),我必须在尝试手动、安全递增键或使用类似 Guid 的东西之间做出选择。由于前者更难管理多个用户和/或多线程,我想使用 Guid 将是最简单的解决方案。

所以让我们考虑使用Guid。最简单的解决方案是创建我的 ID 属性,就像我在上面的示例中所做的那样,但使​​用 Guid 而不是 int。创建新实体后,我需要将 ID 设置为新的 Guid - 然后,每当我设置 Racer.Car 属性时,我还需要设置 Racer.CarID。

手动执行此操作很容易出错,因此我希望在属性 getter 和 setter 中处理很多内容,但我不确定实现它的最佳方法。


这就是我到目前为止所想到的。我想我会研究一下 Linq-to-SQL 生成的代码是如何处理其中一些问题的——也许我会在那里找到线索。

任何建议将不胜感激。

谢谢,
-查尔斯

4

1 回答 1

0

Db4o 确实在内部使用ID 和 UUID,并且可以使用它们。另外值得一读的是这个

于 2009-10-13T11:05:49.347 回答