Дилемма обновления объекта db4o - PullRequest
1 голос
/ 26 февраля 2010

Я новичок в db4o .

Я имею в виду этот вопрос: когда объект извлекается из DAL , возможно, он будет обновляться на бизнес-уровне, тогда мы теряем его исходное свойство, поэтому, когда дело доходит до обновления, как найти какой-либо исходный объект в базе данных для обновления

Ответы [ 2 ]

2 голосов
/ 27 февраля 2010

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

MyClass someInstance = ObjectContainer.Query<MyClass>().FirstOrDefault();
someInstance.Name = "NewName";
someInstance.PhoneNumber = 12132434;
ObjectContainer.Store(someInstance); // This is the update call

[Это просто псевдокод]

Таким образом, вам не нужно сопоставлять объекты друг с другом, как это было бы при использовании СУБД.

Однако вам нужно убедиться, что вы не используете другой экземпляр ObjectContainer, потому что другой контейнер не будет знать, что эти объекты - один и тот же экземпляр (так как в них нет поля ID).

Архитектура вашего приложения должна помочь сделать это для большинства рабочих процессов, поэтому в действительности должен быть только один IObjectContainer. Только если периоды времени действительно велики (например, вам нужно сохранить ссылку на объект в другой базе данных и обработать его каким-либо образом), он будет использовать UUID. Как вы уже указали, это требует хранения идентификатора где-то еще и, следовательно, усложняет вашу архитектуру.

Однако, если вы намереваетесь создать новый объект и «перезаписать» старый объект, все становится несколько сложнее из-за других объектов, которые могут ссылаться на него. Тем не менее, это патологический случай, который обычно следует обрабатывать в рамках самой модели предметной области, например копируя данные объекта из одного объекта в другой.

2 голосов
/ 26 февраля 2010

Вы должны загрузить объект через его ID:

objectContainer.get().ext().getByID(id);

или через его UUID:

objectContainer.get().ext().getByUUID(uuId);

См. Документы для последнего. Для объяснения см. Ответ здесь или документы здесь . Короче говоря, используйте uuid только для долгосрочных ссылок.

...