FluentNHibernate配置,DBConnection.GetSchema()中的NotSupportedException

时间:2011-12-09 13:13:53

标签: .net nhibernate fluent-nhibernate sql-server-ce

尝试配置 SQL Ce 数据库,并在 BuildSessionFactory()上获得以下异常。

相同的配置适用于 SQLite ,但我之前没有使用过NHICKnate的SQLCe。

有什么建议吗?

参考文献:

System.Data.SqlServerCe  3.5.1.0
FluentNHibernate 1.2
NHibernate 3.1

配置:

        Dim fluentConfiguration = Fluently.Configure() _
       .Database(MsSqlCeConfiguration.Standard.ConnectionString(connectionString)) _
        .Mappings(Function(m) m.FluentMappings.AddFromAssemblyOf(Of InstrumentMap)() _
                      .Conventions.Add(FluentNHibernate.Conventions.Helpers.DefaultLazy.Never())) _
        .ExposeConfiguration(Function(c) InlineAssignHelper(cfg, c)) _
        .Cache(Function(c) c.UseQueryCache())

    sessionFactory = fluentConfiguration.BuildSessionFactory()

DBConnection.cs中的异常,位于:

        virtual public DataTable GetSchema(string collectionName) {
            throw ADP.NotSupported(); 
        } 
  

发生了System.NotSupportedException     消息=不支持指定的方法。     来源= System.Data     堆栈跟踪:          在System.Data.Common.DbConnection.GetSchema(String collectionName)     InnerException:

顺便说一句;如果省略.ExposeConfiguration(..)

,我会得到同样的异常

2 个答案:

答案 0 :(得分:1)

3.5不支持GetSchema,但SQL Server Compact 4.0支持GetSchema

答案 1 :(得分:0)

启动期间Hibernate调用GetSchema()。在其默认设置中,它会尝试确定数据库架构是否仍然适用。 如果架构不同,Hibernate能够更新架构 - 如果数据库能够报告其当前架构。 正如Erik已经说过:SQL CE无法报告当前架构...... 因此,这不是Fluent本身的问题。

所以我看到了以下替代方案:

  1. 摆脱异常 一个。抓住并忽略 湾防止Hibernate调用SchemaUpdate.Execute(),   但是SchemaExport.Create()(如果你想要创建你的模式)   查看代码时,最有可能在InlineAssignHelper中完成?!

  2. 摆脱SQL CE; - )

  3. 切换到SQL CE 4.0

  4. 此致 七