SQL Server B上的NHibernate YesNo没有来自DbType AnsiStringFixedLength的映射

时间:2010-06-29 22:24:46

标签: sql-server nhibernate mapping

尝试在sql-server紧凑版上使用nhibernate进行单元测试并遇到一些麻烦。目前我只有一个实体:

 <class name="Audit" table="eolaudit_llk">
<id name="ID" column="eolauditlk_ky">
  <generator class="identity"></generator>
</id>
<property name="Name" column="eolauditlk_nm" />
<property name="Description" column="eolauditlk_dn" />
<property name="Active" column="active_fg" type="YesNo" />
<property name="UpdateUser" column="update_user_id" />
<property name="UpdateDateTime" column="update_dm"/>

我对nhibernate很新。我正在使用以下代码来构建会话:

        public static ISessionFactory CrashAndBurnCompactSQLSessionFactory(string ConnectionString)
    {
        return Fluently.Configure()
            .Database(MsSqlCeConfiguration.Standard
                .ConnectionString(ConnectionString)
                .ShowSql()
                .UseOuterJoin()
                .QuerySubstitutions("true 1, false 0, yes 'Y', no 'N'")
                .Dialect("NHibernate.Dialect.MsSqlCeDialect")
                )
            .Mappings(m =>
            {
                m.HbmMappings
                  .AddFromAssemblyOf<Audit>();
            })
            .ExposeConfiguration(BuildSchema)
            .BuildSessionFactory();
    }

它适用于SQL-Server,但是当我使用上面的SQL-Server CE会话时,我收到以下错误:

    failed: System.ArgumentException: No mapping exists from DbType AnsiStringFixedLength to a known SqlDbType. at System.Data.SqlServerCe.SqlCeType.FromDbType(DbType type)
 at System.Data.SqlServerCe.SqlCeParameter.set_DbType(DbType value)

这是一个头脑清理器 - 我不想在sql-server上进行测试,也无法更改数据库。 definitley相关的是YesNo类型的处理,它从'Y'或'N'char(1)db字段映射到对象中的布尔值。

正如我所说的,SQL-Server中的工作正常。

1 个答案:

答案 0 :(得分:1)

SQL Server CE不支持DbType.AnsiStringFixedLength(请参阅here)。不幸的是,YesNo派生于此DbType。

您可以编写自己的YesNo custom type,或使用Char类型(它映射到DbType.StringFixedLength,这两个版本的SQL Server都支持)。这两种选择都没有特别吸引人。我知道你说这不是一个选项,但是......如果你的目标是SQL Server,那么重新评估你在CE上测试的策略可能是值得的。例如,为什么不使用SQL Server Express?