gpt4 book ai didi

orm - PetaPoco 是否处理枚举?

转载 作者:行者123 更新时间:2023-12-03 13:33:52 27 4
gpt4 key购买 nike

我正在尝试使用 PetaPoco 将表格转换为 POCO。

在我的表中,我有一个名为 TheEnum 的列.此列中的值是表示以下枚举的字符串:

public enum MyEnum
{
Fred,
Wilma
}

当 PetaPoco 试图将字符串“Fred”转换为 MyEnum 时,它会窒息。值(value)。

它在 GetConverter 中执行此操作方法,在行中:
Convert.ChangeType( src, dstType, null );

在这里, src是“弗雷德”(一个 string ),和 dstTypetypeof(MyEnum) .

异常(exception)是 InvalidCastException ,说 Invalid cast from 'System.String' to 'MyEnum'
我错过了什么吗?有什么需要我先注册的吗?

我通过将以下内容添加到 GetConverter 中解决了这个问题方法:
if (dstType.IsEnum && srcType == typeof(string))
{
converter = delegate( object src )
{
return Enum.Parse( dstType, (string)src ) ;
} ;
}

显然,我不想在每一行都运行这个委托(delegate),因为它会大大减慢速度。我可以将此枚举及其值注册到字典中以加快速度,但在我看来,这样的东西可能已经在产品中了。

所以,我的问题是,我需要做一些特别的事情来向 PetaPoco 注册我的枚举吗?

2012 年 2 月 23 日更新

submitted a patch不久前,但它还没有被拉进来。如果你想使用它,查看补丁并合并到你自己的代码中,或者直接获取代码 from here .

最佳答案

我正在使用 4.0.3,PetaPoco 自动将枚举转换为整数并返回。但是,我想将我的枚举转换为字符串并返回。利用 Steve Dunn's EnumMapper和 PetaPoco 的 IMapper ,我想出了这个。多谢你们。

请注意,它不处理 Nullable<TEnum>或数据库中的空值。要使用它,请设置 PetaPoco.Database.Mapper = new MyMapper();

class MyMapper : PetaPoco.IMapper
{
static EnumMapper enumMapper = new EnumMapper();

public void GetTableInfo(Type t, PetaPoco.TableInfo ti)
{
// pass-through implementation
}

public bool MapPropertyToColumn(System.Reflection.PropertyInfo pi, ref string columnName, ref bool resultColumn)
{
// pass-through implementation
return true;
}

public Func<object, object> GetFromDbConverter(System.Reflection.PropertyInfo pi, Type SourceType)
{
if (pi.PropertyType.IsEnum)
{
return dbObj =>
{
string dbString = dbObj.ToString();
return enumMapper.EnumFromString(pi.PropertyType, dbString);
};
}

return null;
}

public Func<object, object> GetToDbConverter(Type SourceType)
{
if (SourceType.IsEnum)
{
return enumVal =>
{
string enumString = enumMapper.StringFromEnum(enumVal);
return enumString;
};
}

return null;
}
}

关于orm - PetaPoco 是否处理枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6850434/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com