當更新實體我有這樣的實體:NHibernate的選擇
public class Permission
{
public virtual int Id{get;set;}
public virtual string Entity { get; set; }
public virtual bool ReadAction { get; set; }
public virtual bool UpdateAction { get; set; }
public virtual bool CreateAction { get; set; }
public virtual bool DeleteAction { get; set; }
public virtual Role Role { get; set; }
public virtual string RoleName
{
get { return Enum.GetName(typeof(Role),this.Role}
}
}
public class PermissionMap : ClassMap<Permission>
{
public PermissionMap()
{
Id(x => x.Id, "id").GeneratedBy.Identity().UnsavedValue(0);
Map(x => x.Entity);
Map(x => x.DeleteAction).CustomType<BooleanType>();
Map(x => x.ReadAction).CustomType<BooleanType>();
Map(x => x.CreateAction).CustomType<BooleanType>();
Map(x => x.UpdateAction).CustomType<BooleanType>();
Map(x => x.Role).CustomType<int>();
}
}
public enum Role
{
Administrator = 0,
SalesPerson = 1,
Marketing = 2
}
我每次查詢它獲取更新數據庫。
我認爲這是因爲RoleName,但事件時,我已經刪除它仍然得到更新。
權限獲取數據庫中每行的更新。 謝謝
發生了什麼事是1)查詢是事務的一部分*(好,有同花順()在請求結束調用) *和2)映射不適合數據庫設置,主要針對空列和非空列。因此,如果DB包含可空布爾值,並且該值爲NULL,則映射表示:它是bool *(不可爲空)* ...在會話中非常髒的對象...將其修復爲數據庫。換句話說,首先檢查列的可空性... –
@RadimKöhler,謝謝,我清理了所有可爲空,重新創建了模式,並且問題仍在發生。謝謝 – Shazam
問題是,我們一直在與會議合作。它非常智能*即使在讀取操作期間,它也可以通過它們的ID跟蹤所有項目。如果任何對象以某種方式被改變*(例如,爲了渲染或傳輸原因)*並且仍然被打開的會話引用,則它被管理爲髒的。當調用session.Fulsh()時(通常在事務Commit()或甚至auto上默認取決於FlushMode)時,任何髒對象都會被持久化。有這個:調查你是否沒有改變任何對象......而打開會話。 NHibernate是可預測的,這不會是一個錯誤;) –