我可以拥有IUserType实例的集合吗?

时间:2009-09-03 22:21:52

标签: nhibernate hibernate nhibernate-mapping

是否可以拥有通过IUserType映射的实体集合?例如:

class Foo
{
    public int Id { get; set; }
    public ISet<Special> Items { get; set; }
}

class Special
{
    public Special(string columnValue)
    {
        _val = columnValue;
    }

    public override string ToString()
    {
        return _val.TranformInInterestingWays();
    }

    private string _val;
}

class SpecialUserTypeForMapping : IUserType
{
    // assume that all the right stuff is here
    // for using the non-default constructor on the way in
    // and calling ToString() on the way out
}

如果我正确阅读文档,<set&gt;,<one-to-many&gt;,<many-to-many&gt;,<class&gt; element支持“type”属性,用于将IUserType映射应用于<property&gt; s。那我该怎么做呢?

1 个答案:

答案 0 :(得分:2)

最方便的解决方案似乎是使用<element&gt;元素,如:

<class name="Foo" table="foos">
     <id  name="Id" />
     <set name="Items" table="foo_special">
         <key column="fooId" />
         <element column="special_value" type="SpecialUserTypeForMapping" />
     </set>
</class>

从数据库中检索不同的Foo实例没有问题,但是不清楚是否可以针对special_value列编写查询,这是我的方案中的一项要求。 This question似乎表明它不是。