DB4O с сервисами Silverlight RIA - PullRequest
       4

DB4O с сервисами Silverlight RIA

0 голосов
/ 25 августа 2009

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

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

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


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

Любые предложения будут с благодарностью.

Спасибо
-Charles

1 Ответ

0 голосов
/ 13 октября 2009

Db4o использует идентификаторы и UUID внутри, и их можно использовать. Также стоит прочитать это .

...