Vous devez être plus précis sur "l'objet". Si vous modifiez les propriétés d'instance d'objet, il suffit de le stocker sera à nouveau effectuer une mise à jour:
MyClass someInstance = ObjectContainer.Query<MyClass>().FirstOrDefault();
someInstance.Name = "NewName";
someInstance.PhoneNumber = 12132434;
ObjectContainer.Store(someInstance); // This is the update call
[Ceci est juste pseudo-code]
Vous n'avez pas besoin de faire correspondre les objets les uns aux autres que vous devrait lors de l'utilisation d'un SGBDR.
Cependant, vous devez vous assurer que vous n'utilisez pas une instance différente de ObjectContainer, car un conteneur différent ne saura pas que ces objets sont la même instance (puisqu'il n'y a pas de champ ID dans ceux-ci).
Votre architecture d'application devrait vous aider à faire cela pour la plupart des flux de travail, donc il ne devrait y en avoir qu'un seul autour de IObjectContainer
. Seulement si les périodes sont vraiment longues (par exemple, vous devez stocker une référence à l'objet dans une base de données différente et la traiter d'une manière ou d'une autre), il utilisera l'UUID. Comme vous l'avez déjà souligné, cela nécessite de stocker l'ID ailleurs et par conséquent complexifie votre architecture.
Si vous avez toutefois l'intention de créer un nouvel objet et d '«écraser» l'ancien objet, les choses deviennent un peu plus compliquées à cause d'autres objets qui pourraient s'y référer. Cependant, il s'agit d'un cas pathologique d'un certain type et il devrait normalement être traité dans le modèle de domaine lui-même, par ex. en copiant des données d'objet d'un objet à un autre.
alors, suggérez-vous que je garde la base de données ouverte pendant le fonctionnement de l'application de sorte que je n'aurai qu'une seule instance de ObjectContainer? – Benny
Essentiellement, oui. L'idée est que ObjectContainer est responsable de la conservation des identités d'objet. Par conséquent, chaque fois que vous fermez un conteneur, vous perdez cette information. Contrairement au SGBDR classique, où vous ouvrez/fermez les connexions le plus rapidement possible, les conteneurs db4o doivent rester ouverts tout le temps où vous avez potentiellement besoin d'accéder à votre modèle de données. Dans une application Web, par exemple, vous pouvez ouvrir la connexion à la demande et la fermer lorsque la requête est terminée. Dans une application de bureau, vous pouvez conserver l'instance ouverte encore plus longtemps. Notez qu'il garde des références! – mnemosyn