2012-09-19 86 views
1

映射無法保存瞬態實體。 NHibernate的

<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';列不允許有空值。 INSERT失敗。 該聲明已被終止。

爲什麼?

謝謝!

回答

1

您正在使用generated="always",類型爲Int32

generated(可選 - 默認爲從不):指定此版本 屬性值實際上是由數據庫生成的。

你可以找到更多信息herehere

您可以將您的類型更改爲Timestamp或刪除該屬性。

我建議改變你的Version屬性是這樣的:

public virtual int Version { get; private set; } 
2

generated="always"表示數據庫(而不是NHibernate)將生成此值,NH將在之後檢索它。

如果不是這種情況,請刪除該屬性。實際上,您可以刪除除name之外的所有屬性,因爲您將它們設置爲默認值。

相關問題