组件支持属性转换描述,主要用于对象属性值和数据存储之前的转换,如常见的枚举和数值,枚举和字符,用户密码等信息转换存储。实际上也可以扩展更灵活的转换如对象关联字段转换,对象序列化转等等。

在Smark.Data描述一个转换器是一件很简单的事情,只需要继承PropertyCastAttribute对象并重写两个方法即可,以下是一个简单的枚举和数值的数值转换

    public class EnumToInt : PropertyCastAttribute{public override object ToColumn(object value, Type ptype, object source){return (int)value;}public override object ToProperty(object value, Type ptype, object source){return (Status)value;}}
    public enum Status : int{Default,Yes,No}

也可以针对需来实现一个枚举和字符的转换

    public class EnumToString : PropertyCastAttribute{public override object ToColumn(object value, Type ptype, object source){return value.ToString();}public override object ToProperty(object value, Type ptype, object source){return Enum.Parse(ptype, (string)value);}}

PropertyCastAttribute的两个方法分别是描述到字段是值和到属性的值处理描述,这样的话就可以做对应的转换工作;以下是实现一个基于BlowFish加解密的密码存储转换。

    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Struct)]public class StringCrypto : PropertyCastAttribute{public static string BlowfishKey="sdfsdfsd1213lkjl";private BlowFishCS.BlowFish mBlowfish;public StringCrypto(){mBlowfish = new BlowFishCS.BlowFish(BlowfishKey);}public StringCrypto(string key){mBlowfish = new BlowFishCS.BlowFish(key);}public override object ToProperty(object value, Type ptype, object source){return DecryptString((string)value);}public override object ToColumn(object value, Type ptype, object source){return EncryptString((string)value);}public string EncryptString(string value){if (string.IsNullOrEmpty(value))return value;return mBlowfish.Encrypt_CTR(value);}public string DecryptString(string value){if (string.IsNullOrEmpty(value))return value;return mBlowfish.Decrypt_CTR(value);}}

转换器实现后就可以通过属性的方式描述到实体成员中使用

    [Table]public interface ITest {[UID][ID]String ID { get; set; }[EnumToInt][Column("ENUM_INT")]Status IntValue { get; set; }[Column("ENUM_STRING")][EnumToString]Status StringValue { get; set; }[StringCrypto][Column]string PassWord { get; set; }}

直接创建对象设置值就能保存

    Test test = new Test();test.IntValue = Status.Yes;test.StringValue = Status.No;test.PassWord = "123456";DBContext.Save(test);

数据保存数据的结果

在制定转换器后也会自动应用到查询条件上

    (Test.intValue == new Status[] {Status.Default,Status.No }).Delete<Test>();

Smark.Data 开源数据访问组件 Apache License 2.0 (Apache)

Smark.Data 值转换器相关推荐

  1. Smark.Data实体默认值描述

    在数据设计的时候会针对一些字段设置默认的值,Smark.Data同样支持这样的功能,组件通过在属性中描述一个Value属性来告诉组件这个值如果在没有设置的情况应该提供怎样的值.组件提供一个描述的基类, ...

  2. 开源数据访问组件Smark.Data 1.8入门编

    本章节主要讲述如何使用Smark.Data 1.8进行快速的数据库应用开发,主要内容包括配置,执行SQL和存储过程等基础的数据操作. 配置 在组件使用之前必须进行一个初始化配置,主要配置数据访问设备和 ...

  3. 开源数据访问组件Smark.Data 1.8

    Smark.Data一直强调以最简单和高效的方式访问数据库,在这个版本中组件引入了Query<T>对象,它是一个查询值描述对象,通过它可以更方便地进行数据查询并获取结果.组件会分析T的具体 ...

  4. Smark.Data

    http://www.ikende.com/smarkdata.aspx Smark.Data是基于Ado.net实现的数据访问组件,提供基于强类型的查询表达式进行灵活的数据查询,统计,修改和删除等操 ...

  5. vue里获取不到data_vue methods中取不到data值

    vue methods中取不到data值 export default { name: "sysAdd", data() { return { form: { name: '', ...

  6. 值转换器IValueConverter

    值转换器可以把一种类型转换成另一种类型.例如,绑定到一个代表图片地址的字符串,希望显示的是图片,将数据存储为浮点类型,但通过 货币的形式呈现,还有奖日期存储成DateTime格式,在界面上显示时使用用 ...

  7. jQuery获取HTML标签自定义属性值或data值

    //获取属性值1 <div id="text" value="中国北京"></div>$("#text").attr ...

  8. Smark.Data 1.5更新详解

    由于一直忙于Beetle的开发和优化,Smark.Data组件已经有很长一段时间更新.这段时间发现Smark.Data在某些情况下不足,而这些情况又比较普遍所以进行了1.5版的更新.其更新的主要功能包 ...

  9. 如何从 Datagrid 中获得单元格的内容与 使用值转换器进行绑定数据的转换IValueConverter...

    一.如何从 Datagrid 中获得单元格的内容 DataGrid 属于一种 ItemsControl, 因此,它有 Items 属性并且用ItemContainer 封装它的 items. 但是,W ...

最新文章

  1. AGG第十一课 agg::ellipse 渲染椭圆和多边形
  2. SSL--用Tomcat服务器配置https双向认证过程实战
  3. 【剑指offer28:字符串的排列】【java】
  4. Dart_VM的相关简介与运行模式解析
  5. 最佳实践丨三种典型场景下的云上虚拟IDC(私有池)选购指南
  6. HBase1.2.3 数据模型
  7. VR/AR平台战略与实践(1)
  8. dpkg:处理 xxx (--configure)时出错解决办法,也可用于卸载软件出错的情况
  9. 关于被调函数形参:SqList L、SqList L、SqList *L 的区别
  10. 企业实战——Ansible自动化运维基础知识
  11. 计算机访问周期,访问周期最短的存储器是
  12. 求余函数mod和fmod
  13. 你租的房子遇 “坑” 了么?
  14. 360校招笔试题(C++小明买菜)
  15. cracker.jar 文件打不开
  16. c语言实现计算函数在某点的导数近似值
  17. 相当全的JS及.NET正则表达式语法
  18. Appium+Pytest+Allure集成PO项目管理模式实现自动化测试
  19. idea maven parent飘红
  20. 网络爬虫工作原理分析

热门文章

  1. 我的2019春招(前端暑期实习)记录
  2. 富士康裁员六万,试图用机器人扭转赤字?
  3. 如何查看 phtml文件 并有代码颜色提示
  4. 分析若干没面试机会和没体现实力的简历
  5. 内网***测试定位技术总结
  6. 运行JBoss 5.1.0 GA时出现Error installing to Instantiated:name=AttachmentStore state=Described错误的解决办法...
  7. 浅谈likely与unlikely
  8. 分析分布式服务框架理论介绍
  9. jstatd - Virtual Machine jstat Daemon
  10. IIS中的sc-win32-status——Win32状态详细说明