可以在nhibernate中使用sqlite清单类型功能吗?
这是发布在hibernate.org论坛和nhusers列表上的,运气不好,所以我想我会在这里试试 简单地说,假设我有一个类:可以在nhibernate中使用sqlite清单类型功能吗?,nhibernate,sqlite,nhibernate-mapping,system.data.sqlite,Nhibernate,Sqlite,Nhibernate Mapping,System.data.sqlite,这是发布在hibernate.org论坛和nhusers列表上的,运气不好,所以我想我会在这里试试 简单地说,假设我有一个类: class A { public virtual object SomeValue { get; set; } } SomeValue的类型基本上是一组.NET IConvertible类型(原语,如bool、byte、char、int16、double、float等),加上byte[]和string 我正在尝试为创建一个nhibernate映射来反映这一点,这
class A
{
public virtual object SomeValue { get; set; }
}
SomeValue的类型基本上是一组.NET IConvertible类型(原语,如bool、byte、char、int16、double、float等),加上byte[]和string
我正在尝试为创建一个nhibernate映射来反映这一点,这样我就可以基本上为任意对象(上述类型之一)设置一些值,并在以后检索它。然后,我的applogic将对其进行反思,以找到类型并相应地进行操作
到目前为止,我已经尝试创建一个IUserType实现来尝试和处理这个问题。但是,我不知道要为SqlType[]SqlTypes返回什么。我考虑了新的SqlType(DbType.Object),但当我试图从中生成一个模式时,我得到了一个System.ArgumentException:方言不支持DbType.Object
如果尝试另一种数据类型,则在尝试转换该类型时会出现各种强制转换异常。例如,如果我使用DbType.Binary,并将someValue设置为int32,在尝试提交时,我会获得System.InvalidCastException:无法将类型为“System.int32”的对象强制转换为类型为“System.Byte[]”
有没有办法做到这一点
以下附加的IUserType非工作实现代码(基于)
为了解决方言不支持SqlType(DbType.Object)的问题,我们通过使用显式支持子类化SqliteDialogue来支持它:
public class SQLiteDialectWithManifestTyping : SQLiteDialect
{
public SQLiteDialectWithManifestTyping() : base()
{
base.RegisterColumnType(DbType.Object, "NONE");
}
}
要在Fluent中使用此方言,请在SQLiteConfiguration对象上调用方言()。在NHibernate中,适当设置配置属性方言(参见参考手册第3.5.1节)
然后,我们可以为映射应用上述DataElementType实现(需要将SqlTypes定义更改为:
public SqlType[] SqlTypes
{
get
{
return new[] { new SqlType(DbType.Object) };
}
}
注:
为了解决方言不支持SqlType(DbType.Object)的问题,我们通过使用显式支持子类化SqliteDialogue来支持它:
public class SQLiteDialectWithManifestTyping : SQLiteDialect
{
public SQLiteDialectWithManifestTyping() : base()
{
base.RegisterColumnType(DbType.Object, "NONE");
}
}
要在Fluent中使用此方言,请在SQLiteConfiguration对象上调用方言()。在NHibernate中,适当地设置配置属性方言(请参阅参考手册第3.5.1节)
然后,我们可以为映射应用上述DataElementType实现(需要将SqlTypes定义更改为:
public SqlType[] SqlTypes
{
get
{
return new[] { new SqlType(DbType.Object) };
}
}
注:
哦…你在尝试做一些棘手的事情。好运:你在冒险进入复杂的水域。哦…你在尝试做一些棘手的事情。好运:你在冒险进入复杂的水域。