我已经考虑过将db4oodbms用于最近的silverlight/ria服务项目,但是有一点我可以使用一些建议-如何使关联工作。ria服务要求您用associationattribute标记所有关联的实体。associationattribute的构造函数要求您指定实体到关联实体的键,以及关联实体本身的键。
例如,假设我有一个带有car id和car属性的racer类,以及一个带有id属性的car类。我的赛车班会是这样的:
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.car id和car.id属性。要使这与ria服务协同工作,我需要创建自己的独特密钥,这一点我并不介意,我只是不知道最好的方法。
所以我要问你的问题是“你如何创建这些密钥/标识”?
由于没有任何自动递增生成字段的概念(我不知道任何方法),我必须在尝试手动、安全地递增键或使用类似guid的东西之间进行选择。由于前者在多个用户和/或多线程的情况下更难管理,我认为使用guid是最简单的解决方案。
所以让我们考虑使用一个guid。最简单的解决方案是创建我的id属性,就像我在上面的例子中所做的那样,但是使用一个guid而不是int。我需要在创建新的实体之后将id设置为一个新的guid-然后,每当我设置racer.car属性时,我也需要设置racer.carid。
手工操作很容易出错,所以我希望在getter和setter属性中处理很多这样的操作,但是我不确定实现它的最佳方法。
到目前为止我就是这么想的。我想我会研究linq to sql生成的代码是如何处理这些问题的——也许我会在这里找到线索。
如有任何建议,将不胜感激。
谢谢,
-查尔斯