1

私はレガシーシステムに取り組んでおり、流暢な nHibernate を導入しましたが、最後のマッピングが 1 つあり、動作していないようです。

コード:

public class Permit
    {
    public int PermitId { get; set; }
    public char Discipline { get; set; }
    public PermitDetails PermitDetails { get; set; }
    }

public PermitDetails
    {
    public int PermitId { get; set; }
    }

public class GasPermitDetails : PermitDetails
    {
       ... permit details
    }

public class ElectricalPermitDetails : PermitDetails
    {
       ... permit details
    }

スキーマ:

*tblPermit*
PermitId, int
Discipline, char
.... some other columns

*tblGas*
PermitId, int
....gasDetails

*tblElectrical*
PermitId, int
....electrical details

の場合、 からデータを取得する必要がありtblPermit.Disciplineます。の場合、 からデータを取得する必要があります。私はこれを理解しようとしていじり回していますが、これまでのところ運がありません。"G"tblGastblPermit.Discipline"E"tblElectrical

4

2 に答える 2

0

(tblPermit.Discipline が "G" の場合、tblGas からデータを取得する必要があります。tblPermit.Discipline が "E" の場合、tblElectrical からデータを取得する必要があります)。私はこれを理解しようとしていじり回していますが、これまでのところ運がありません。

いずれにせよ、サブタイプの PK フィールドはスーパータイプのテーブルの FK であるため、識別子フィールドは無関係です。したがって、これはサブタイプごとのテーブル マッピングです。

于 2008-12-28T10:13:52.073 に答える
0

スキーマが正しく出てきたように見えます。すべての PermitDetails サブクラスの PermitId が、対応するリレーション テーブルへの外部キーになると考えているため、発生している問題についてより具体的に説明する必要がある場合があります。

例えば。分野「ガス」の場合、問題の許可には、許可のガス情報が含まれている必要があります。tblGas の PermitID が tblPermit の ID への外部キーである場合、関係があります。このような:

+---------------+         +----------------------+
|               | 1     1 |                      |
|   tblPermit   |<------->| tblGas               |
|               |         | (for gas discipline) |
|               |         |                      |
+---------------+         +----------------------+
|               |         |                      |
| {PK} PermitId |         | {FK} PermitID        | <- ForeignKey to tblPermit.PermitID
|               |         |                      |
+---------------+         +----------------------+

正しいデータを選択するために分野列は必要ありません。許可証の識別子で tblElectrical、tblGas を検索するクエリが 1 つだけ必要です。そうすれば、その情報とともに許可を得ることができます。

(PS. データベース テーブルを視覚化するために UML クラス図を使用して申し訳ありませんが、カラス フィート表記は ASCII にうまく変換されません)

于 2008-12-27T21:54:41.347 に答える