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 只是一个包含三个 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 回答