NHibernate Да Нет на SQL-сервере CE Нет сопоставления из DbType AnsiStringFixedLength - PullRequest
0 голосов
/ 30 июня 2010

Попытка использовать nhibernate на sql-server compact edition для модульного тестирования и возникли некоторые проблемы. На данный момент у меня есть только одна сущность:

 <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-сервером, но когда я использую сеанс 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-сервере и не могу изменить базу данных. Это определенно связано с обработкой того типа YesNo, который отображается из поля «Y» или «N» char (1) в булево значение объекта.

Как я уже сказал, в SQL-Server все работает отлично.

1 Ответ

1 голос
/ 10 июля 2010

SQL Server CE не поддерживает DbType.AnsiStringFixedLength (см. здесь ). К сожалению, YesNo происходит от этого DbType.

Вы можете написать свой собственный YesNo пользовательский тип или использовать тип Char (он сопоставляется с DbType.StringFixedLength, который поддерживается обеими версиями SQL Server). Ни один из вариантов не является особенно привлекательным. Я знаю, что вы сказали, что это не вариант, но ... если вы ориентируетесь на SQL Server, возможно, стоит пересмотреть свою стратегию тестирования на CE. Почему бы не SQL Server Express, например?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...