2014-10-03 51 views
0

我正在使用某人的Sql Server數據庫和Fluent NHibernate映射模型,我使用(我自己的)SQLite數據庫進行測試。GUID連接到Sqlite UniqueIdentifier在NHibernate導致查詢錯誤

一個表被稱爲「島」,並且包含「TradId」列是一個GUID型等被聲明爲

public virtual Guid TradId { get; set; } 

和映射:

Id(x => x.TradId).Column("TradID").GeneratedBy.Assigned(); 

用於測試的目的在我的SqlLite數據庫中,它使用我認爲映射到字符串的「UniqueIdentifier」類型進行聲明。

TradID UNIQUEIDENTIFIER NOT NULL collate nocase, 

一般來說,這工作得很好,當任何企圖通過製造NHibernate的通過ID值,連接到子記錄時出現去取時除外。

NHibernate的吐出:

[...] WHERE this_.TradID = @p0;@p0 = ac3e30ff-e767-440f-ab1f-0000293c5a0c [Type: Guid (0)] 

但是,這是行不通的,因爲我覺得它需要作爲字符串來處理。 有什麼我應該做的與Sqlite連接映射這不同?還是有什麼我失蹤?

============================================== ==========================

其他信息

我有這個代碼單元測試:

 var session = this.openSession; 
     var trad = session.Query<Trad>() 
      .FetchMany(x => x.TradInventeringList) 
      .ToList()[0]; 

     var surveys = session.Query<TradInventering>() 
      .Where(x => x.Trad.TradId == trad.TradId) 
      .ToList(); 

     Assert.Greater(surveys.Count, 0); 

如果我有一個會話連接到我的SqlServer(活)數據庫,但對我的Sqlite數據庫失敗,則運行此代碼。

我在想如果我需要添加一個基於IPropertyConvention的約定到我的流利。配置。

回答

2

在花費太多時間搞亂PropertyConventions之後,我在冬眠犀牛上看到了這個post

問題解決了,只需重新寫FluentNhibernate SQLiteConfiguration到:

config = 
      SQLiteConfiguration.Standard 
      .ConnectionString(
      "Data Source=" + databaseFilename + ";Version=3;BinaryGuid=False") 
      .ShowSql(); 

設置BinaryGuid =假處理的問題。現在它工作正常。

0

你有沒有試過uuid.string生成器?它使用轉換成字符串的GUID。

+0

UUID值已經在數據庫中,所以我不需要生成它。 我的問題是如何讓NHibernate知道在連接到Sqlite數據庫而不是Sql Server時將GUID字段作爲字符串處理。 – 2014-10-06 09:32:22

+0

這不就是我回答的嗎? uuid.string將GUID視爲字符串。 – 2014-10-06 10:00:06

+0

那麼我不知道你怎麼想我會用uuid.string來解決我的問題。你能再給我多一點繼續嗎? – 2014-10-06 13:19:45