2009-09-03 4 views
1

Возможно ли иметь набор объектов, которые отображаются через IUserType? Например:Могу ли я иметь коллекцию экземпляров 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>, <one-to-many>, <many-to-many>, ни <class> элемент поддерживает атрибут «тип», который используется для наложения IUserType к <property> s. Итак, как я могу это сделать?

ответ

2

Наиболее целесообразным решением, как представляется, использовать> элемент <element, например, так:

<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, кажется, указывает, что это не так.