最近の Silverlight / RIA Services プロジェクトで db4o OODBMS を使用することを検討しましたが、1 つだけアドバイスできることがあります。それは、関連付けを機能させる方法です。RIA サービスでは、関連するすべてのエンティティを AssociationAttribute でマークする必要があります。AssociationAttribute のコンストラクターでは、関連付けられたエンティティに対するエンティティのキーと、関連付けられたエンティティ自体のキーを指定する必要があります。
例として、CarID プロパティと Car プロパティを持つ Racer クラスと、ID プロパティを持つ Car クラスがあるとします。私の Racer クラスは次のようになります。
class Racer
{
public int ID { get; set; }
public int? CarID { get; set; }
[Association("Racer_Car", "CarID", "ID")]
public Car Car { get; set; }
}
db4o (または任意の OODBMS) を使用する際に私が目にする問題は、外部キーと主キーが存在しないことです。これを RIA Services で機能させるには、独自の一意のキーを作成する必要がありますが、それは気にしません。そうするための最善の方法がわかりません。
では、私の質問は「これらのキー/ID をどのように作成しますか?」ということです。
自動インクリメント生成フィールドの概念がないため (私がまったく知らない)、手動でキーを安全にインクリメントするか、Guid のようなものを使用するかを選択する必要があります。前者は複数のユーザーやマルチスレッドで管理するのが難しいため、Guid を使用するのが最も簡単な解決策になると思います。
それでは、Guid の使用を検討してみましょう。最も簡単な解決策は、上記の例のように ID プロパティを作成することですが、int の代わりに Guid を使用します。新しいエンティティを作成した後、ID を新しい Guid に設定する必要があります。その後、Racer.Car プロパティを設定するたびに、Racer.CarID も設定する必要があります。
手動で行うとエラーが発生しやすくなるため、プロパティのゲッターとセッターで多くの処理を行いたいのですが、それを実装する最善の方法がわかりません。
それが私がこれまで考えてきたことです。Linq-to-SQL で生成されたコードがこれらの問題のいくつかをどのように処理するかを調べてみようと思います。そこに手がかりが見つかるかもしれません。
どんな提案でも大歓迎です。
ありがとう -
チャールズ