1

映射

<class name="Project" optimistic-lock="version">
    <id name="Id" column="ProjectID" type="guid" unsaved-value="00000000-0000-0000-0000-000000000000">  
        <generator class="guid.comb" />
    </id>
    <version name="Version" generated="always" type="Int32" unsaved-value="0">
       <column name="Version" sql-type="int" not-null="true" />
    </version>
    <!-- properties -->
</class>

调试时很明显Version equals 0

public class Project {
    public virtual Guid Id { get; protected set; }
    public virtual Int32 Version { get; set; }
}

但是当保存异常发生时:

无法将值 NULL 插入到列“版本”、表“XXXX.dbo.Project”中;列不允许空值。插入失败。该语句已终止。

为什么?

谢谢!

4

2 回答 2

2

generated="always"表示 DB 而不是 NHibernate 将生成此值,NH 将在之后检索它。

如果不是这种情况,请删除该属性。事实上,您可以删除除 之外的所有属性name,因为您将它们设置为默认值。

于 2012-09-19T15:08:11.980 回答
1

您正在使用generated="always"type Int32

生成(可选 - 默认为从不):指定此版本属性值实际上是由数据库生成的。

您可以在此处此处找到更多信息。

您可以将类型更改为Timestamp或删除该属性。

我建议以Version这种方式更改您的财产:

public virtual int Version { get; private set; }
于 2012-09-19T15:11:25.330 回答