Вы должны быть более точными относительно «объекта». Если изменить свойства экземпляра объекта, в просто хранить его снова выполнить обновление:
MyClass someInstance = ObjectContainer.Query<MyClass>().FirstOrDefault();
someInstance.Name = "NewName";
someInstance.PhoneNumber = 12132434;
ObjectContainer.Store(someInstance); // This is the update call
[Это просто псевдо-код]
Так что вам не нужно, чтобы соответствовать объекты друг к другу, как вы при использовании СУБД.
Однако вам необходимо убедиться, что вы не используете другой экземпляр объекта ObjectContainer, потому что другой контейнер не будет знать, что эти объекты являются одним и тем же экземпляром (поскольку в них нет поля идентификатора).
Ваша архитектура приложения должна помочь сделать это для большинства рабочих процессов, поэтому должно быть действительно только одно IObjectContainer
. Только если временные интервалы очень длинные (например, вам нужно сохранить ссылку на объект в другой базе данных и каким-то образом обработать его), он будет использовать UUID. Как вы уже указывали, для этого требуется хранить идентификатор где-то еще и, следовательно, усовершенствовать вашу архитектуру.
Если вы, однако, собираетесь создать новый объект и «перезаписать» старый объект, все будет несколько сложнее из-за других объектов, которые могут ссылаться на него. Однако это хаотичный патологический случай и обычно должен обрабатываться в самой модели домена, например. путем копирования данных объекта с одного объекта на другой.
Итак, предлагаете ли вы, чтобы я открывал базу данных во время работы приложения так что у меня будет только один экземпляр объекта ObjectContainer? – Benny
По существу, да. Идея состоит в том, что ObjectContainer отвечает за сохранение идентификаторов объектов. Поэтому, когда вы закрываете контейнер, вы теряете эту информацию. В отличие от типичной РСУБД, где вы открываете/закрываете соединения как можно быстрее, контейнеры db4o должны оставаться открытыми все время, когда вам потенциально нужен доступ к вашей модели данных. В веб-приложении, например, вы откроете соединение по запросу и закроете его, когда запрос будет завершен. В настольном приложении вы можете оставить экземпляр открытым еще дольше. Обратите внимание, что он держит ссылки! – mnemosyn