Subsonic Simplerepository GetPaged;枚举问题

发布于 2024-08-24 12:25:00 字数 1005 浏览 3 评论 0原文

曾经,SimpleRepository 不支持枚举。如果您有一个带有 Enum 的 POCO 对象,它将无法正确持久化,您必须有一个要使用的支持变量,例如:

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**

此异常发生在

SubSonic.Extensions.Objects.ChangeTypeTo( 的第 95 行) C:\TEMP\subsonic\SubSonic.Core\Extensions\Objects.cs 中的对象值,类型 conversionType):第 95 行

At one point, SimpleRepository didn't support enums. If you had a POCO object with an Enum it wouldn't persist correctly, you had to have a backing variable which you would use eg:

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;
    }

The name in your table would then have to be the named of the variable, and not the enum.

This issue was resolved with a recent patch on github.

However, I'm still seeing issues when trying to use GetPaged

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

Throws an exception:

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

This exception occurs at line 95 of

SubSonic.Extensions.Objects.ChangeTypeTo(Object value, Type conversionType) in C:\TEMP\subsonic\SubSonic.Core\Extensions\Objects.cs: line 95

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

讽刺将军 2024-08-31 12:25:00

我修补了 Subsonic.Extensions.Objects.ChangeTypeTo 第 95 行以包含此子句:

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

因此从 int32 到 Enum 的直接转换不再抛出异常

I patched Subsonic.Extensions.Objects.ChangeTypeTo line 95 to include this clause:

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

So a direct cast from int32 to Enum no longer throws and exception

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文