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

          很多时候我们需要利用数据库存储非标准字段,即不是简单数字,货币,字符串等等,或即便是存储字符串,也希望不要直接以字符串本身存储,而是做一定的加密转换再存储,如密码。这时我们就需要用到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
{
//...
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值