我有一個簡單的實體 地圖GUID柱在功能NHibernate帶約束
public class SiteEntity
{
public virtual int Id {get; set;}
public virtual Guid PublicId {get; set;}
public virtual string Name {get; set;}
}
我使用Fluent NHibernate
包,以實現以下約束映射它:
Id
是內部DB標識符,以便它會自動創建並定義爲PKPublicId
是一個公共唯一ID。它被定義爲具有獨特和NOT NULL約束的列和插入產生很像PKName
是描述所以需要(不爲空),但可以是任何
至於結果,我有以下映射
public class SiteEntityMap : ClassMap<SiteEntity>
{
public SiteEntityMap()
{
Table("T_SITE");
Id(x => x.Id).Column("site_id").GeneratedBy.Identity();
Map(x => x.PublicId, "site_public_id").Generated.Insert().ReadOnly().Unique().Not.Nullable();
Map(x => x.Name, "site_name").Not.Nullable().CustomType("AnsiString").Unique().Length(512);
ReadOnly();
}
}
現在,如果我創建使用,因爲我喜歡它創建NHibernate的映射架構。然而,用以試圖節省SiteEntity
與該消息已字段Name
初始化在GenericADOException
結果:
「無法插入:[IWS.Configuration.DataModel.SiteEntity] [SQL:INSERT INTO T_CFG_SITE(SITE_NAME)VALUES( ?);選擇SCOPE_IDENTITY()]」
如果我從PublicId
財產一切正常的映射刪除Not.Nullable()
但在數據庫領域允許空值。
請建議如何將Guid屬性映射到插入時自動生成值不可爲空的列。
您是否在插入前檢查實體是如何被構造的? –
看來site_name爲空,你檢查了嗎?你檢查是否有一些觸發器?看看這個表格:T_CFG_SITE –
是的,當我調用'session.Save(siteEntity)'時,對象在Name屬性中有值。我在這個問題中寫道,雖然這個消息就是它的樣子,但實際的問題在於'PublicId'屬性的映射。請重新閱讀這個問題,讓我知道什麼是不清楚的,所以我可以重新翻譯一下。 –