2

このテーブルには他の属性が含まれているため、他の3つのテーブルにマップされた複合キーを持つレガシーテーブルがあります。これは単純なマッピングテーブルではないため、多対多セットソリューションを使用してこれをマップすることはできません.

以下は私がやったことです:

<class name="classA" table="A">
<composite-id name="ID" class="AKey">
  <key-many-to-one name="Id_one" class="One" column="Id_one" />
  <key-many-to-one name="Id_two" class="Two" column="Id_two" />
  <key-many-to-one name="Id_three" class="Three" column="Id_three" />
</composite-id>

AKey は 3 つの ID を保持する単なる構造体であり、Id_one、Id_two、および Id_three はすべて、それぞれのクラスで int として定義されています。

public struct Akey {
    public int Id_one { get; set; }
    public int Id_two { get; set; }
    public int Id_three { get; set; }
}

これは正常にコンパイルされますが、実行しようとするとエラー メッセージが表示されます。

NHibernate.QueryException : NHibernate.Criterion.SimpleExpression の型の不一致: ID は AKey 型、実際の型は System.Int32 と予想されます

私が間違ったことや見逃したことについてアドバイスしてください。

本当にありがとう!

4

1 に答える 1

5

key-many-to-one を使用する場合は、次のクラスを配置します。

public class Akey {
    public virtual One One {get; set;}
    public virtual Two Two {get; set;}
    public virtual Three Three {get; set;}
}

それ以外の場合は、Id が必要な場合は、それらを classA のプロパティとしてマップするだけです。

 <composite-id>
     <key-property name="Id_one" column="Id_one" />
     <key-property name="Id_two" column="Id_two" />
     <key-property name="Id_three" column="Id_three" />
 </composite-id>

.

public class classA {
    public virtual int Id_one {get; set;}
    public virtual int Id_two {get; set;}
    public virtual int Id_three {get; set;}

    // ... rest of props ...
}

またはあなたが持っているような複合として:

 <composite-id name="ID" class="AKey">
     <key-property name="Id_one" column="Id_one" />
     <key-property name="Id_two" column="Id_two" />
     <key-property name="Id_three" column="Id_three" />
 </composite-id>

.

public class AKey {
    public virtual int Id_one {get; set;}
    public virtual int Id_two {get; set;}
    public virtual int Id_three {get; set;}
}

public class classA {
    public virtual AKey ID {get; set;}

    // ... rest of props ...
}

ついに ...

 <composite-id>
   <key-many-to-one name="Id_one" class="One" column="Id_one" />
   <key-many-to-one name="Id_two" class="Two" column="Id_two" />
   <key-many-to-one name="Id_three" class="Three" column="Id_three" />
 </composite-id>

.

public class classA {
    public virtual One One {get; set;}
    public virtual Two Two {get; set;}
    public virtual Three Three {get; set;}

    // ... rest of props ...
}

私は構造体を C# で扱えるわけではないので、構造体を使用できるかどうかを調べます。

于 2009-08-25T18:28:54.733 に答える