我有一个自定义的NHibernate XMLtype(动态地将POCO转换为XML),所以我可以在DB中保存对象。
这适用于SQL Server 2014而没有任何问题。但是,在尝试运行使用SQLite的单元测试时,由于这个原因,我收到了大量错误。
System.ArgumentException:Dialect不支持DbType.Xml 参数名称:typecode。
我使用的自定义类型与此处提到的类似:How to map XML type column to a strongly typed object property with NHibernate?
现在我需要弄清楚如何使用SQLite来实现这种类型。
我做了什么:
- 注册SQLiteConfiguration时,我指定一个注册XMl ColumnType的自定义Dialect:
Configuration config = null;
var db = SQLiteConfiguration.Standard.ConnectionString(_connectionString).ShowSql().Dialect("InvestX.Data.nHibernate.DbContext.SQLiteDialectWithManifestTyping");
_sessionFactory = new DbSessionFactory(Fluently
.Configure()
.Database(db)
.Mappings(m => m.FluentMappings.Conventions.AddFromAssemblyOf<EnumConvention>())
.Mappings(m => m.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly()))
.ExposeConfiguration(c => config = c)
.BuildSessionFactory());
...
base.RegisterColumnType(System.Data.DbType.Xml, "Xml");
- 确保XmlType返回eprosper SQLType
它在SQL Server 2012上运行良好,但在SQLite上失败了。
其他想法 我已成功通过ALTER SCRIPT手动将列作为XML类型添加到我的数据库,然后将我的NHibernate Binding更改为绑定为nvarchar(MAX)。这适用于所有场景,除非我的系统需要从头开始创建新数据库。这是一个临时解决方案(即最永久的解决方案),所以我不是它的忠实粉丝。
有什么想法吗?