关闭

XAF之存储非标准数据库字段

909人阅读 评论(0) 收藏 举报
          很多时候我们需要利用数据库存储非标准字段,即不是简单数字,货币,字符串等等,或即便是存储字符串,也希望不要直接以字符串本身存储,而是做一定的加密转换再存储,如密码。这时我们就需要用到ValueConverter类。

          先看一个例子,比如在一个XPO类中,我们要存储一个Image属性,该属性为Image类型。

[ValueConverter(typeof(DevExpress.Xpo.Metadata.ImageValueConverter))]
    public System.Drawing.Image Image {
        get { return image; }
        set {
            SetPropertyValue("Image" , ref image, value);
        }
    }
如上面的代码,只需要为该属性加上一个ImageValueConverter属性,该字段存储到数据库和从数据库解析出来都可自动完成。

ImageValueConverter是从ValueConverter继承而来,我们要实现自己的ValueConverter也要从它继承,并实现三个方法:

object  ConvertToStorageType(object)           完成XPO字段到数据库存储字段的转换

object  ConvertFromStorageType(object)     完成从数据库字段解析到XPO字段类型

Type  StorageType                    获取数据库的存储类型

   比如,现在我们要实现自己的ImageConverter:

public class ImageConverter : DevExpress.Xpo.Metadata.ValueConverter 
    {
        public override object ConvertToStorageType(object value)
        {
            if (value == null)
            {
                return null;
            }
            else 
            {
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                ((System.Drawing.Image)value).Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                return ms.GetBuffer();
            }
        }
        public override object ConvertFromStorageType(object value)
        {
            if (value == null)
            {
                return null;
            }
            else
            {
                System.IO.MemoryStream ms = new System.IO.MemoryStream((byte[])value);
                return new System.Drawing.Bitmap(ms);
            }
        }
        public override Type StorageType
        {
            get { return typeof(byte[]); }
        }
    }

使用该新的ValueConverter

[ValueConverter(typeof(ImageConverter))]
public Image Photo
{
//...
}




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:193169次
    • 积分:3076
    • 等级:
    • 排名:第11244名
    • 原创:106篇
    • 转载:40篇
    • 译文:5篇
    • 评论:34条
    文章分类
    最新评论