0

誰かがレガシーデータベースのマッピングを手伝ってくれることを願っています。ここで説明している問題は他の人を悩ませていますが、Web上で本当に良い解決策を見つけることができませんでした。

免責事項:これはレガシーDBです。複合キーを制御することはできません。彼らは吸うし、あなたが彼らが吸うと私に言っても変更することはできません。代理キーも追加できません。これらはオプションではないため、どちらも提案しないでください。

2つのテーブルがあり、両方とも複合キーがあります。一方のテーブルのキーの1つは、もう一方のテーブルからコレクションを取得するためのキーの一部として使用されます。つまり、キーはテーブル間で完全には一致しません。ClassBは、可能であれば、このマッピングのためにプロパティを追加することを避けたいすべての場所で使用されます。

public class ClassA
{
    //[PK]
    public string SsoUid;

    //[PK]
    public string PolicyNumber;

    public IList<ClassB> Others;

    //more properties....

}

public class ClassB
{
    //[PK]
    public string PolicyNumber;

    //[PK]
    public string PolicyDateTime;

    //more properties
}

ClassAのインスタンスを取得し、PolicyNumberに一致するすべてのClassB行を取得したいと思います。私は1対多で何かを実現しようとしていますが、これは技術的には1対多として扱っている多対多である可能性があることを認識しています。

アソシエーションクラスを使用してみましたが、機能するかどうかを確認するのに十分な距離がありませんでした。私はこれらのより複雑なマッピングに不慣れであり、アドバイスを探しています。私はほとんどどんなアイデアにもオープンです。

ありがとう、コーリー

4

2 に答える 2

1

レガシーデータベーススキーマのマッピングを処理する最も簡単な方法は、代理で生成された主キー(つまり、SQL ServerのID)を各データベーステーブルに追加し、既存の複合主キーを一意の制約に変更することです。これにより、既存の外部キーを保持でき、NHibernateのマッピングが容易になります。

それが不可能な場合は、マッピングでproperty-refを使用してこれを実現できる可能性があります。

編集:貧血ドメインモデルにいつでもフォールバックできます。つまり、各クラスをマップしますが、関係は除外します。キーでClassAを取得するデータアクセスメソッドと、PolicyNumberでClassBのコレクションを取得するデータアクセスメソッドがあります。

于 2010-03-15T14:09:11.017 に答える
0

最終的に、私はDBチームに、私が扱っていたテーブルにいくつかの代理キーを追加することを認めさせることができました。 これは私が私の訴訟を弁護するために使用した文書です

于 2011-03-23T12:16:07.857 に答える