2010-06-29 33 views
0

試圖在sql-server compact版上使用nhibernate進行單元測試並遇到一些麻煩。目前,我只是有一個實體,那就是:NHibernate是否SQL-Server CE上沒有從DbType存在映射AnsiStringFixedLength

<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相關的是,處理從Yes或'N'char(1)db字段映射到對象中布爾值的YesNo類型。

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

+0

您是否查看過SQL CE數據庫中的映射以查看正在創建的內容?你有沒有讓流利NH爲你創建真實的映射文件,所以你可以看到映射的樣子? – 2010-06-30 14:01:44

回答

1

SQL Server CE不支持DbType.AnsiStringFixedLength(請參閱here)。不幸的是沒有從這個DbType派生。

你可以編寫自己的YesNo custom type,或使用類型Char(它映射到DbType.StringFixedLength,這是兩個版本的SQL Server支持)。這兩個選項都不是特別吸引人。我知道你說這不是一種選擇,但是如果你的目標是SQL Server,那麼可能需要重新評估你在CE上測試的策略。爲什麼不是SQL Server Express,例如?

+0

感謝Julian - 現在我們只是在本地sql-server實例中進行測試......直到我可以花時間再看一遍。我試圖寫一個自定義類型,但它不適合我。 – 2010-09-13 15:39:20