NHIbernate:如何使用ICompositeUserType映射包

时间:2012-01-20 20:03:02

标签: .net nhibernate orm

假设我有一个包含不可变类型集合的类,我想用自定义ICompositeUserType映射

public class Foo
{
    public long Id { get; protected set; }

    public virtual IList<Bar> Bars { get; set; }
}

//immutable
public class Bar
{
    private _blah;
    private _halb;

    public Bar(string blah, string halb)
    {
        _blah = blah; _halb = halb;
    }

    public Blah { get { return _blah; } }
    public Halb { get { return _halb; } }
}

如何在Foo上设置包的映射以使用复合用户类型,以便自定义类型可以在必要时调用构造函数?

我试过了,但复合元素上没有类型。

<bag name="Bars" table="FooBars" lazy="true">
   <key column="FooId" foreign-key="FK_Bars_FooId" />
   <composite-element class="Doman.Bar, Domain" type="Integration.UserTypes.BarCompositeUserType, Integration">
       <property name="Blah">
          <column name ="BarBlah" sql-type="char(2)"/>
       </property>
   </composite-element>
</bag>

但是,这不起作用,因为NHibernate无法识别“composite-element”上的“type”属性

如何使用ICompositeUserType映射包? (我正在使用NHibernate 3.2)

1 个答案:

答案 0 :(得分:2)

元素而不是composite-element,因为属性和转换是在ICompositeUserType

中指定的
<element type="Integration.UserTypes.BarCompositeUserType, Integration">
  <column name="BarBlah" />
  <column name="BarHalb" />
</element>