gpt4 book ai didi

NHibernate 映射到 System.Drawing.Color

转载 作者:行者123 更新时间:2023-12-02 16:23:02 25 4
gpt4 key购买 nike

是否可以只进行某种类型转换并直接映射到 System.Drawing.Color?我将颜色存储为 html/css 值。即#ffffff。我不想创建一个实现 IUserType 的自定义类型,它只是 System.Drawing.Color 的包装器。

最佳答案

试试这个尺寸。 NHibernate 用户类型不会替换您想要公开的类型,它只是提供从存储的数据库类型自动映射到 .NET 类型的机制(这里是从字符串到 Color,反之亦然)。

public class ColorUserType : IUserType
{
public bool Equals(object x, object y)
{
if (ReferenceEquals(x, y)) return true;
if (x == null || y == null) return false;
return x.Equals(y);
}

public int GetHashCode(object x)
{
return x == null ? typeof(Color).GetHashCode() + 473 : x.GetHashCode();
}

public object NullSafeGet(IDataReader rs, string[] names, object owner)
{
var obj = NHibernateUtil.String.NullSafeGet(rs, names[0]);
if (obj == null) return null;
var colorString = (string)obj;
return ColorTranslator.FromHtml(colorString);
}

public void NullSafeSet(IDbCommand cmd, object value, int index)
{
if (value == null)
{
((IDataParameter)cmd.Parameters[index]).Value = DBNull.Value;
}
else
{
((IDataParameter)cmd.Parameters[index]).Value = ColorTranslator.ToHtml((Color)value);
}

}

public object DeepCopy(object value)
{
return value;
}

public object Replace(object original, object target, object owner)
{
return original;
}

public object Assemble(object cached, object owner)
{
return cached;
}

public object Disassemble(object value)
{
return value;
}

public SqlType[] SqlTypes
{
get { return new[] {new SqlType(DbType.StringFixedLength)}; }
}

public Type ReturnedType
{
get { return typeof(Color); }
}

public bool IsMutable
{
get { return true; }
}
}

下面的映射应该可以工作:

<property
name="Color"
column="hex_color"
type="YourNamespace.ColorUserType, YourAssembly" />

为了完整起见,并且感谢 Josh,如果您使用 FluentNHibernate,您可以像这样映射它:

Map(m => m.Color).CustomTypeIs<ColorUserType>();

关于NHibernate 映射到 System.Drawing.Color,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1063933/

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