我有这个实体:
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,但是当我删除它时仍然会获得更新的事件 权限获取它在数据库中的每一行的更新。 感谢
答案 0 :(得分:2)
正如评论中所讨论的那样,重点是,我们一直在使用会话。它非常智能,即使在读取操作期间,它也可以通过ID跟踪所有项目。
如果,任何对象以某种方式更改(例如,出于渲染或转移原因)并且仍然被开放会话引用,则将其作为脏对象进行管理。调用session.Fulsh()
时(通常默认情况下在事务Commit()或甚至auto上,依赖于FlushMode)任何脏对象都会被持久化。
因此,为避免发出UPDATE语句,实体映射及其内容必须匹配。在最后Shazam成立时,在这种情况下,罪魁祸首就是这种映射
// Map(x => x.Role).CustomType<int>();
Map(x => CustomType<Role>()