2010-03-10 5 views
0

В какой-то момент SimpleRepository не поддерживает перечисления. Если у вас есть объект POCO с Enum не будет сохраняться правильно, вы должны иметь переменную подкладочный, который вы будете использовать, например:Subsonic Simplerepository GetPaged <T> Проблемы с перечислением

public enum Color 
    { 
     Red = 1, 
     Blue = 2 
    } 

    public class Car 
    { 
     [SubSonicIgnore] 
     public Color CarColor 
     { 
      get 
      { 
       return (Color)ColorMe; 
      } 
      set 
      { 
       ColorMe= (int)value; 
      } 
     } 
     public int ColorMe; 
    } 

Имя в таблице будет тогда быть названным из переменная, а не перечисление.

Эта проблема была устранена недавним патчем на github.

Однако я до сих пор видим проблемы при попытке использовать GetPaged

var results = Db.GetPaged<Car>(1, 10); 

Выдает исключение:

**Tests.Models.NewTests.SimplePagedSearch threw exception: System.InvalidCastException: Invalid cast from 'System.Int32' to 'Models.Car.Color** 

Это исключение происходит в строке 95

SubSonic.Extensions .Objects.ChangeTypeTo (значение объекта, тип conversionType) в C: \ TEMP \ subsonic \ SubSonic.Core \ Extensions \ Objects.cs: строка 95

ответ

0

Я пропатчен Subsonic.Extensions.Objects.ChangeTypeTo линии 95 включить этот пункт:

else if (conversionType.IsEnum) 
     { 
      return Enum.ToObject(conversionType, value);     
     } 

Так прямой бросок из int32 в Enum больше не бросает и исключение

Смежные вопросы