根据StackOverflow问题'NHibernate和sql timestamp列为版本',我使用以下映射:
<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应用程序时,我得到了:
[Path] \ Clients.hbm.xml(7,90):XML验证错误:元素'urn:nhibernate-mapping-2.2:version'不能包含子元素'urn:nhibernate-mapping-2.2:column'因为父元素的内容模型是空的。
但据我所知2.2是映射的最新版本,那么如何才能在版本元素中放置一个列元素呢?
很抱歉,如果这是非常基本的,
答案 0 :(得分:1)
如果其他人遇到此问题:
Ayende Rahien在这篇关于NHibernate的博客中指出 - 但仅限于(AFAIK)版本2.1.n;我正在使用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服务器'timestamp'不是您的常规时间戳,因此要求该类型应为二进制blob。
请注意,如果您进行迁移,则需要在Web / App配置中更改NHibernate配置 - 目前大多数教程似乎适用于v.2.0(或更早版本) - 您需要2.1的最新参考或教程
答案 1 :(得分:0)
快速查看documentation会发现您的映射不正确。它应该是这样的:
<version name="RowNumber" column="RowNumber"
generated="always" unsaved-value="null"
type="Timestamp" />
最诚挚的问候,
Oliver Hanappi