0

私はテーブルがあります。流暢NHibernateは、外部キーマッピング

プレーヤー
をイド:int型 - 主キー
名:文字列

BowlerType
イド:int型 - 主キー
説明:文字列

PlayerBowlerType
PlayerId:Player.Id
BowlerTypeIdを参照nullの外部キーではなくint型:BowlerType.Id

にプレーヤーを参照するnullの外部キーは、多くのボーリングタイプに確認することができませんint型。いくつかの例データを挙げる

プレーヤー
1 | Peter
2 |ジョン

ボウラータイプ
6 |スロー
7 |ファスト

PlayerBowlerType
1 | 6
1 | 7
2 | 7

答えて

1

ここで必要なものは、PlayerBowlerTypeで使用する複合IDです。 (PlayerBowlerTypeIdタイプが除去されると、コードがPlayerBowlerTypeに直接置かれ、適切に適合)あなたは、技術的アイデンティティオブジェクトなしでこれを行うことができます

public class PlayerBowlerTypeId 
{ 
    public virtual int PlayerId { get; set; } 

    public virtual int BowlerTypeId { get; set; } 

    public override bool Equals(object obj) 
    { 
     return Equals(obj as PlayerBowlerTypeId); 
    } 

    private bool Equals(PlayerBowlerTypeId other) 
    { 
     if (ReferenceEquals(other, null)) return false; 
     if (ReferenceEquals(this, other)) return true; 

     return PlayerId == other.PlayerId && 
      BowlerTypeId == other.BowlerTypeId; 
    } 

    public override int GetHashCode() 
    { 
     unchecked 
     { 
      int hash = GetType().GetHashCode(); 
      hash = (hash * 31)^PlayerId.GetHashCode(); 
      hash = (hash * 31)^BowlerTypeId.GetHashCode(); 

      return hash; 
     } 
    } 
} 

public class PlayerBowlerType 
{ 
    public PlayerBowlerType() 
    { 
     Id = new PlayerBowlerTypeId(); 
    } 

    public virtual PlayerBowlerTypeId Id { get; set; } 
} 

public class PlayerBowlerTypeMap : ClassMap<PlayerBowlerType> 
{ 
    public PlayerBowlerTypeMap() 
    { 
     Table("TABLENAME"); 

     CompositeId<PlayerBowlerTypeId>(x => x.Id) 
      .KeyProperty(x => x.BowlerTypeId, "COLUMNNAME") 
      .KeyProperty(x => x.PlayerId, "COLUMNNAME"); 
    } 
} 

が、私は多くの問題を持っていた:このセットアップ作業をする必要があります(3〜4個の別々のバグ)が発生します。そのうちの1つについては、hereで説明します。

ORMシステムのバグを補うためにドメインオブジェクトを変更することは嫌ですが、PlayerBowlerTypeIdタイプを使用するだけで、頭痛の種が大幅に削減されます。

これは、実際のテーブル名とカラム名を使用するようにマッピングを変更している限り、機能します。

0

私はHasManytoManyを使用できると思います。 要件に基づいて、プレーヤーのIDとボウラーの種類を含む表を作成する必要があります。これには多対多の関係があります。

このサイトをご覧になる場合:https://github.com/jagregory/fluent-nhibernate/wiki/Getting-started StoreとProductsのマッピングは、意図したマッピングと同じです。 enter image description here