代码之家  ›  专栏  ›  技术社区  ›  Venemo

如何使NHibernate将给定的属性序列化为二进制字段?

  •  0
  • Venemo  · 技术社区  · 14 年前

    例如,我有类似的东西:

    public class User
    {
        ...
    
        // This field will be persisted
        public virtual byte[] PortraitData { get; set; }
    
        // This method will get me what I'm actually interested in
        public virtual Image GetPortrait()
        {
            return SerializationHelper.Deserialize<Image>(PortraitData);
        }
    }
    

    SerializationHelper 根据读者的想象上课。它不做任何复杂的事情,只是将数据序列化和反序列化为字节数组并返回。)

    我想将上述代码更改为:

    public class User
    {
        ...
    
        public virtual Image Portrait { get; set; }
    }
    


    (在上述情况下,我希望它序列化 Image varbinary 调用的字段 Portrait .)

    我的实际场景要比这个复杂一些,但是这个例子很好地演示了我想要实现的目标。(意思是: System.Drawing.Image 类不是我唯一感兴趣的连载类。)

    我知道Fluent或NHibernate本身肯定有某种配置允许这样做,但我想不出来。你能告诉我怎么做吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Rich    14 年前

    关键是IUserType的一个实现,它本质上是一个用于从POCO类型到SQL类型来回转换的接口。我使用它来转换数据库中的枚举值<->自定义字符串值。看看NHibernate的YesNoType代码,它在真/假布尔POCO类型之间来回转换为“YES”/“NO”SQL varchar类型。

        2
  •  0
  •   Diego Mijelshon    14 年前

    你必须实施 IUserType .

    在xml中 type="QualifiedName"