Я использую пользовательский тип пользователя для своего столбца State
, но, к сожалению, если я проецирую этот столбец на dto, я получаю исключение, говорящее System.InvalidCastException : Specified cast is not valid.
.
Мой запрос
Item itemAlias = null;
Dto dtoAlias = null;
var l = Session.QueryOver(() => itemAlias)
.SelectList(x => x
.Select(xx => xx.Id).WithAlias(() => dtoAlias.Id)
.Select(xx => xx.State).WithAlias(() => dtoAlias.State))
.Where(x => x.State == States.FirstState)
.TransformUsing(Transformers.AliasToBean<Dto>())
.List<Dto>();
Мой код типа пользователя:
public class States : ReadOnlyCollection<State>
{
public static State FirstState = new State(0, "First State");
public static State SecondState = new State(1, "Second State");
public States()
: base(new [] { FirstState, SecondState })
{
}
public static IEnumerable<State> GetAll()
{
return new States();
}
}
public class StateUserType : GenericWellKnownInstanceType<State, int>
{
public StateUserType()
: base(new States(),
(entity, id) => entity.Id == id,
entity => entity.Id)
{
}
public override SqlType[] SqlTypes
{
get { return new[] { SqlTypeFactory.Int16 }; }
}
}
Моя Item
карта классов -
public class ItemMap : ClassMap<Item>
{
public ItemMap()
{
Id(x => x.Id);
Map(x => x.State)
.CustomType<StateUserType>()
.Not.Nullable();
}
}
Мой код:
public class Dto
{
public int Id { get; set; }
public State State { get; set; }
}
GenericWellKnownInstanceType
от здесь .Мой тип пользователя работает как положено, если я не проецирую какие-либо значения.Я использую NHibernate 3.2.
Решение
Кажется, я устранил проблему.
В строке 73 из GenericWellKnownInstanceType
(найдено здесь )
замените
var value = (TId)rs.GetValue(index0);
на
var value = (TId)Convert.ChangeType(rs.GetValue(index0), typeof(TId));
Я посмотрю об отправке патча.