2009-08-25 5 views
0

Я рассмотрел использование OODBMS db4o с недавним проектом Silverlight/RIA Services, но есть один момент, о котором я мог бы посоветовать - как заставить ассоциации работать. RIA Services требует, чтобы вы пометили все связанные с ним объекты с атрибутом AssociationAttribute. Конструктор AssociationAttribute требует, чтобы вы указали ключ своего объекта связанному объекту и ключу самого связанного объекта.DB4O с Silverlight RIA Services

В качестве примера предположим, что у меня есть класс Racer с CarID и Car свойствами, и класс Car с свойством ID. Мой класс 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 Services, мне нужно будет создать свои собственные уникальные ключи, о которых я не возражаю, я просто не знаю, как это сделать.

Итак, мой вопрос для вас: «Как бы вы создали эти ключи/идентификаторы»?

Поскольку нет никакой концепции автоматического приращения сгенерированного поля (ничто из того, что мне известно ни о каком способе), мне пришлось бы выбирать между попытками вручную, безопасно увеличивать ключи или использовать что-то вроде Guid , Поскольку первым было бы сложнее управлять несколькими пользователями и/или многопоточными, я бы предположил, что использование Guid будет самым простым решением.

Итак, давайте рассмотрим использование Руководства. Самым простым решением было бы создать мои свойства идентификатора, как и в примере выше, но используйте Guid вместо int. Мне нужно было бы установить ID в новый Guid после создания новых сущностей - тогда, когда бы я не установил свойство Racer.Car, мне также нужно было бы установить Racer.CarID.

Выполнение этого вручную было бы подвержено ошибкам, поэтому я бы хотел, чтобы многие из них обрабатывались в получателях и сеттерах свойств, но я не уверен в лучшем способе его реализации.


Это то, о чем я думал до сих пор. Я думаю, что я посмотрю, как сгенерированный код Linq-to-SQL справляется с некоторыми из этих проблем - возможно, я найду там ключ.

Любые предложения были бы весьма полезными.

Спасибо,
-Charles

ответ

0

db4o действительно использует IDs and UUIDs внутри и можно использовать те. Также стоит прочитать this.

Смежные вопросы