问题:我们数据库中的所有表都有 CreatedDate、CreatedBy、ChangedDate、ChangedBy 字段,我希望在保存/更新 ActiveRecord 实体时自动设置这些字段。
我的第一次尝试是重写 Save() 和 Update() 方法。但只有当我对实体执行直接 Save() 或 Update() 操作时,才会调用这些方法。它们不会在主 - 详细信息场景中被调用,在该场景中我仅在主上调用 Save() 。
接下来尝试的是 OnSave() 和 OnUpdate() 方法,但此处字段中的更改未保留在数据库中。
最后我尝试了BeforeSave()方法。但更新时不会调用该方法。
问题:如何在 Save() 或 Update() 期间自动设置这些 CreatedDate、CreatedBy、ChangedDate、ChangedBy 字段?
要根据需要修改数据,您必须重写 BeforeSave 方法,如下所示:
protected override bool BeforeSave(IDictionary state)
{
bool retval = base.BeforeSave(state);
state["Password"] = Global.Encrypt("password");
return retval;
}
最后保存您的实例:
protected void btnSave_Click(object sender, EventArgs e)
{
try
{
qfh.User user = null;
user = new qfh.User();
user.UserName = txtUserName.Text;
user.Name = txtName.Text;
user.IsAdministrator = cboIsAdministrador.SelectedValue == "Yes";
user.IsActive = cboIsActive.SelectedValue == "Yes";
user.SaveCopy();
}
catch (Exception ex)
{
ex = Utilities.GetInnerException(ex);
JSLiteral.Text = Utilities.GetFormattedExceptionMessage(ex);
}
}
我通常使用 SaveCopy() 来利用重写方法 FindDirty(object id, IDictionary previousState, IDictionary currentState, NHibernate.Type.IType[] types) 来获取该类的先前值。
希望能帮助到你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)