2

long型の複数のフィールドを許可するものを見つけました。ただし、たとえばGuidや日付さえある場合があるため、それがどれほど役立つかはわかりません。

私のニーズをサポートするために彼を変更することもできますが、これは非常に一般的な要求であるため、最初から作成するのではなく、テストされ、試行され、真実であるものを見つけることができるはずです。

この背後にある主な目的は、IDマップパターンを使用することです。このパターンは、多かれ少なかれ、それをサポートするためにIDフィールドパターンを必要とすると思います。辞書のキーとしてIdentityFieldコンストラクトを使用します

何か案は?

ありがとう

4

2 に答える 2

1

複数列の PK に同様のパターンを実装するには、テーブルの PK 列ごとにクラスにフィールド/プロパティを作成するだけでよいと思います。

たとえば、long、guid、および datetime を持つ PK を含む "Message" テーブルがある場合、クラスには long、Guid、および DateTime プロパティを含めるだけで済みます。

これらのオブジェクトをオブジェクトのメモリ内アドレスではなく、データベースの用語で比較するため、これらの PK フィールドを使用してオブジェクトに Equals() と GetHashCode() を実装することもできます。同じ PK プロパティを持つオブジェクトが同じハッシュ コードを生成するようにする必要があるため、GetHashCode は重要です。GetHashCode を実装するには、ここで Jon Skeet の回答を見ることをお勧めします: オーバーライドされた System.Object.GetHashCode に最適なアルゴリズムは何ですか?

Fowler の「Identity Field」パターンは、テーブルに 1 つのサロゲート PK 列があることを想定している可能性があります。

于 2011-02-11T21:54:52.747 に答える
0

S#arp アーキテクチャを確認してください。Entityそれらのオブジェクトから継承すると、 DomainSignatureAttribute. これらのプロパティは、で提供されるEqualsおよびの実装におけるオブジェクトの ID と見なされます。GetHashCodeEntity

于 2011-02-11T23:29:17.900 に答える