我有这个实体:
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,但是当我删除它时,事件仍然得到更新。
数据库中每一行的Permission获取更新。谢谢
正如评论中所讨论的那样,重点是,我们一直在进行会议。它是如此智能,以至于即使在读取操作期间,它也可以通过其ID跟踪所有项目。
如果任何对象以某种方式更改(例如,出于渲染或传输的原因)并且仍被打开的会话引用,则将其作为脏对象进行管理。当session.Fulsh()
调用时(通常默认情况下是在事务Commit()上默认,甚至在自动时,取决于FlushMode),任何脏对象都将保留。
因此,为避免发出UPDATE语句,实体映射及其内容必须匹配。到最后Shazam成立了,在这种情况下,罪魁祸首就是这种映射
// Map(x => x.Role).CustomType<int>();
Map(x => CustomType<Role>()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句