gpt4 book ai didi

c# - 如何使用 CaSTLe ActiveRecord 在保存或更新期间自动填充字段

转载 作者:行者123 更新时间:2023-11-30 12:18:54 25 4
gpt4 key购买 nike

问题:我们数据库中的所有表都有 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) 来获取类的先前值。

希望对您有所帮助。

关于c# - 如何使用 CaSTLe ActiveRecord 在保存或更新期间自动填充字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1142156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com