2009-12-27 13 views
1

按照該StackOverflow的問題 'NHibernate和SQL時間戳列的版本',我用下面的映射:NHibernate的 - 試圖得到它使用一個SQL Server行版本

<version name="RowNumber" generated="always" unsaved-value="null" type="BinaryBlob">  
    <column name="RowNumber" not-null="false" sql-type="timestamp" /> 
</version> 

<property name="CreateDate" column="CreateDate" type="DateTime" update="false" insert="false" /> 

(此後的其他物業)。

但是當我跑我的ASP.MVC程序,我得到:

[路徑] \ Clients.hbm.xml(7,90):XML驗證錯誤:元素「金塔:NHibernate的映射 - 2.2:版本'不能包含子元素'urn:nhibernate-mapping-2.2:column',因爲父元素的內容模型是空的。

但據我所見2.2是映射的最新版本,所以任何人都可以在版本元素中放置一個列元素?

很抱歉,如果這是非常基本的,

回答

0

就讓我們來看看在documentation表明你的映射是不正確的。它應該是這樣的:

<version name="RowNumber" column="RowNumber" 
     generated="always" unsaved-value="null" 
     type="Timestamp" /> 

最好的問候,
奧利弗Hanappi

+0

感謝您的回覆 - 但是,這會產生: 無法在Byte []類型的字段RowNumber0_投值的類型TimestampType。請檢查以確保映射是正確的,並確保您的DataProvider支持此數據類型。 根據Ayende的博客,SQL服務器rowversion/timestamp需要映射到BinaryBlob – BruceK 2009-12-27 21:38:16

+0

啊,我明白了。您是否嘗試過BinaryBlob數據類型或Int32或類似的東西?我使用Timestamp是因爲NHibernate文檔說你只能使用很少的幾種類型:Int64,Int32,Int16,Ticks,Timestamp或TimeSpan。 – 2009-12-27 23:19:20

1

如果任何人有這個問題:

它的工作原理Ayende Rahien指定在這個博客上NHibernate的 - 但僅在2.1.n版本(AFAIK);我正在使用2.0.n.我也認爲你需要對象的字段/屬性是byte [],而不是System.Linq.Binary,因爲該類型沒有默認構造函數(但我不確定這個 - 我似乎必須這樣做)

示例(原諒名稱):

<version name="RowKludge" type="BinaryBlob" generated="always" unsaved-value="null" > 
    <column name="RowNumber" 
     not-null="false" 
     sql-type="timestamp"/> 
</version> 

一個SQL Server「時間戳」是不是你的正常時間戳,因此該類型應該是一個二進制的blob的要求。

請注意,如果您遷移,您將需要更改Web/App配置中的NHibernate配置 - 目前大多數教程似乎適用於v.2.0(或更早版本) - 您需要一個最新的參考或教程2.1

相關問題