代码之家  ›  专栏  ›  技术社区  ›  Charles

带有Silverlight RIA服务的db4o

  •  0
  • Charles  · 技术社区  · 17 年前

    我已经考虑过将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生成的代码是如何处理这些问题的——也许我会在这里找到线索。

    如有任何建议,将不胜感激。

    谢谢,
    -查尔斯

    1 回复  |  直到 16 年前
        1
  •  0
  •   Goran    16 年前

    db4o确实使用 IDs and UUIDs 在内部也可以使用。同样值得一读的是 this .

    推荐文章