我有一个自定义事件监听器(流利地)使用:
添加到我的配置中.ExposeConfiguration(c => c.SetListener(ListenerType.SaveUpdate, listener))
我的监听器只是在保存或更新之前捕获并处理审计字段(CreatedBy,Modified By等)
protected override object PerformSaveOrUpdate(SaveOrUpdateEvent sender)
{
var entity = sender.Entity as IEditableEntity;
if (entity != null)
{
if (entity.IsNew())
ProcessEntityBeforeInsert(entity);
else
ProcessEntityBeforeUpdate(entity);
}
return base.PerformSaveOrUpdate(sender);
}
'entity.IsNew()'是一种检查实体的Id是否为'>的方法。 0'并正确评估。但是'base.PerformSaveOrUpdate'正在尝试执行插入时它应该是一个更新并且作为Id传递null(它被映射为GeneratedBy.Identity())并且我得到以下异常:
"Cannot insert the value NULL into column 'Id', table '...'; column does not allow nulls. INSERT fails.\r\nThe statement has been terminated."
答案 0 :(得分:1)
为此,您应该使用PreInsert和PreUpdate方法。