Я рассмотрел использование 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