私はdb4oを初めて使用します。
私はこの質問を念頭に置いています:オブジェクトがDALから取得されると、ビジネスレイヤーで更新される可能性があり、元のプロパティが失われるため、更新に関しては、データベース内の元のオブジェクトを見つける方法を教えてください。アップデート?
私はdb4oを初めて使用します。
私はこの質問を念頭に置いています:オブジェクトがDALから取得されると、ビジネスレイヤーで更新される可能性があり、元のプロパティが失われるため、更新に関しては、データベース内の元のオブジェクトを見つける方法を教えてください。アップデート?
IDを介してオブジェクトをロードする必要があります。
objectContainer.get().ext().getByID(id);
またはそのUUIDを介して:
objectContainer.get().ext().getByUUID(uuId);
後者については、ドキュメントを参照してください。説明については、ここの回答またはここのドキュメントを参照してください。短期的には、uuidは長期参照にのみ使用してください。
「オブジェクト」についてより正確にする必要があります。オブジェクトインスタンスのプロパティを変更した場合、それを再度保存するだけで更新が実行されます。
MyClass someInstance = ObjectContainer.Query<MyClass>().FirstOrDefault();
someInstance.Name = "NewName";
someInstance.PhoneNumber = 12132434;
ObjectContainer.Store(someInstance); // This is the update call
[これは単なる擬似コードです]
したがって、RDBMSを使用する場合のように、オブジェクトを相互に照合する必要はありません。
ただし、ObjectContainerの別のインスタンスを使用していないことを確認する必要があります。これは、別のコンテナがこれらのオブジェクトが同じインスタンスであることを認識しないためです(IDフィールドがないため)。
アプリケーションアーキテクチャは、ほとんどのワークフローでこれを行うのに役立つはずなので、実際には1つしか存在しないはずIObjectContainer
です。タイムスパンが非常に長い場合(たとえば、オブジェクトへの参照を別のデータベースに保存して何らかの方法で処理する必要がある場合)にのみ、UUIDを使用します。すでに指摘したように、IDを別の場所に保存する必要があるため、アーキテクチャが複雑になります。
ただし、新しいオブジェクトを作成して古いオブジェクトを「上書き」する場合は、他のオブジェクトがそれを参照している可能性があるため、状況はやや複雑になります。ただし、これはなんらかの病的なケースであり、通常はドメインモデル自体の中で処理する必要があります。たとえば、あるオブジェクトから別のオブジェクトにオブジェクトデータをコピーすることによって処理する必要があります。