NHIbernate:如何使用 ICompositeUserType 映射包

Posted

技术标签:

【中文标题】NHIbernate:如何使用 ICompositeUserType 映射包【英文标题】:NHIbernate: How to map a bag with an ICompositeUserType 【发布时间】:2012-01-20 20:03:02 【问题描述】:

假设我有一个包含不可变类型集合的类,我想使用自定义 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 无法识别“复合元素”上的“类型”属性

如何使用 ICompositeUserType 映射包? (我使用的是 NHibernate 3.2)

【问题讨论】:

【参考方案1】:

元素而不是复合元素,因为属性和转换是在 ICompositeUserType 中指定的

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

【讨论】:

以上是关于NHIbernate:如何使用 ICompositeUserType 映射包的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NHibernate 模式生成更新数据库表模式?

如何使用 NHibernate 迭代整个表?

NHibernate - 如何使用 where 子句保存对象

如何使用 MySQL 配置流畅的 nHibernate

Nhibernate - 如何使用 CompositeId 设计域对象和映射

如何使用 NHibernate 检索具有列表条件的元素