J'ai envisagé d'utiliser l'OODBMS db4o avec un projet Silverlight/RIA Services récent, mais il y a un point sur lequel je pourrais utiliser des conseils pour faire fonctionner les associations. Les services RIA requièrent que vous marquiez toutes vos entités associées avec un AssociationAttribute. Le constructeur de l'associationAttribute requiert que vous spécifiez la clé de votre entité à l'entité associée et la clé de l'entité associée elle-même. Imaginez que j'ai une classe Racer avec les propriétés CarID et Car, et une classe Car avec une propriété ID. Ma classe Racer ressemblerait à quelque chose comme ceci:DB4O avec les services RIA Silverlight
class Racer
{
public int ID { get; set; }
public int? CarID { get; set; }
[Association("Racer_Car", "CarID", "ID")]
public Car Car { get; set; }
}
Le problème que je vois à l'utilisation db4o (ou tout SGBDOO) est que les clés étrangères et les clés primaires ne sont pas, et ne doivent pas, existent - et le résultat est que Je n'aurais pas besoin des propriétés Racer.CarID et Car.ID. Pour que cela fonctionne avec RIA Services, je devrais créer mes propres clés uniques, ce qui ne me dérange pas, je ne connais pas la meilleure façon de le faire.
Donc, ma question pour vous est "comment créeriez-vous ces clés/ID"? Comme il n'y a pas de concept de champ généré par incrémentation automatique (aucun que je sache), je devrais choisir entre essayer d'incrémenter manuellement les clés, ou utiliser quelque chose comme un Guid. . Puisque le premier serait plus difficile à gérer avec plusieurs utilisateurs et/ou multithread, j'imagine que l'utilisation d'un Guid serait la solution la plus simple.
Considérons donc un Guid. La solution la plus simple serait de créer mes propriétés d'ID, tout comme dans l'exemple ci-dessus, mais utilisez un Guid au lieu de int. Je devrais placer l'identification à un nouveau guide après avoir créé de nouvelles entités - puis, chaque fois que je place la propriété Racer.Car, j'aurais aussi besoin de définir le Racer.CarID. Faire ça à la main serait sujet à l'erreur, donc je voudrais beaucoup de choses traitées dans les getters et les setters de propriété, mais je ne suis pas sûr de la meilleure façon de l'implémenter.
C'est ce que j'ai pensé jusqu'ici. Je pense que je vais regarder comment le code généré Linq-to-SQL gère certaines de ces préoccupations - peut-être que je vais trouver un indice là-bas.
Toutes les suggestions seraient grandement appréciées.
Merci,
-Charles