流畅的NHibernate - 方言不支持DbType.Xml(SQLite)

时间:2016-10-03 18:15:33

标签: c# xml sqlite nhibernate fluent-nhibernate

我有一个自定义的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)。这适用于所有场景,除非我的系统需要从头开始创建新数据库。这是一个临时解决方案(即最永久的解决方案),所以我不是它的忠实粉丝。

有什么想法吗?

0 个答案:

没有答案