4

私が継承した従来のデータベースには、次のテーブルが含まれています。

Teams ( 
 TeamId INT PRIMARY KEY,
 Name VARCHAR(30)
)

Players (
 PlayerId INT PRIMARY KEY,
 Team VARCHAR(30)
)

プレーヤー テーブルの外部キーは、teamId ではなくチーム名を参照します。

バッグを使用してチームからプレイヤーにマッピングしようとしました:

<bag name="Players">
    <key column="Team" foreign-key="Name" />
    <one-to-many class="DataTransfer.Player, DataTransfer" />
</bag>

しかし、SqlException: Conversion failed when conversion the varchar value 'Arsenal' to data type int が発生します

バッグを使用して文字列の外部キーを他の領域にマップできましたが、その場合、外部キーは親テーブルの主キーを参照していました。

編集:NHibernate 2.0.1を使用しています

4

4 に答える 4

3

この問題を解決するためにproperty-ref属性が存在すると思います。

<bag name="Players">
   <key column="Team" property-ref="Team" />
   <one-to-many class="Player" property-ref="Team" />
</bag>
于 2009-01-20T19:11:01.260 に答える
3

これが機能するかどうかは 100% わかりませんが、多対 1 のマッピング関係を試してみましたか?

多分このようなもの:

<many-to-one name="Players" class="DataTransfer.Player, DataTransfer"
             column="Name" property-ref="Team" />

NHibernate のマニュアルによると、property-ref は、外部キーが主キー以外の関連テーブルの一意のキーを参照するレガシー データのマッピングに使用される属性です。これは、あなたが置かれている状況のように聞こえます。

于 2009-01-20T18:28:42.063 に答える
0

これを見つけました: https://nhibernate.jira.com/browse/NH-1272、これは NHibernate のバグのようで、2.1.0Alpha1 で修正されています。

NHibernate 2.1.0Alpha2 で試してみましたが、うまくいきました。

(property-ref は map タグにのみ含める必要があります)

于 2009-04-20T10:06:34.330 に答える