我在 C# 中有一个对象,我想将其用作数据库中的主键,当添加新对象时它会自动递增。该对象基本上是一个 ulong 值的包装器,它使用该值的一些位作为附加提示。我想将它作为“纯”ulong 值存储在数据库中,但我想在从数据库加载/卸载值时获得自动转换。IE,根据它们来自的表将“提示”位应用于值。
根据我在网上找到的大量示例(该论坛上有大量帮助),我开始了实现自己的 IUserType 对象的旅程。
我有一个 ObjectId 类,它是一个对象 ID
class ObjectIdType: IUserType
{
private static readonly NHibernate.SqlTypes.SqlType[] SQL_TYPES = { NHibernateUtil.UInt64.SqlType };
public NHibernate.SqlTypes.SqlType[] SqlTypes
{
get { return SQL_TYPES; }
}
public Type ReturnedType
{
get { return typeof(ObjectId); }
}
...
}
我有一个如下所示的映射类:
public class ObjectTableMap()
{
Id(x => x.Id)
.Column("instance_id")
.CustomType<ObjectIdType>()
.GeneratedBy.Native();
}
在这一点上,我在配置中遇到一个异常,即 Id 只能是整数。我想这是有道理的,但我有一半期望实现自定义类型,本机 ulong 数据库类型将接管并工作。
我试图走上创建自定义生成器的道路,但它仍然有点超出我的技能水平,所以我遇到了挫折。
我的问题是,我是否可以通过映射完成我想要做的事情?