如何在 SubSonic ORM 上截取 ActiveRecord 上的 save 方法?
我需要拦截 Save 方法,进行一些验证,更改一些属性,然后再次正常运行。
我怎样才能做到这一点?
谢谢! 亚历克斯
I need to intercept the Save method, do some validations, alter some properties and then let it go again normally.
How can I do this?
Thanks!
Alex
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我建议添加以下部分方法,以便在实际操作之前触发:
这不是一个事件,但无论如何我都会使用 CancelEventArgs,它很友好,人们知道它并且知道如何使用它,并且可以取消实际操作从部分方法。
这两个也应该添加到实际操作后触发的现有列表中:
我不喜欢 OnAdded() 名称,但如果采用 Add 而不是 Insert,那么我们必须坚持使用它。
就是这样......通过这些部分,我认为我们涵盖了实际数据持久性方法的所有前后,使我们能够更加灵活地执行我们想要的数据操作。
我可以实现这个,但我总是害怕接触 tt 文件,因为未来的更新将消除我所有的自定义更改! :)
谢谢!
亚历克斯
I would recommend adding the following partial methods to be fired before their actual action:
This isn't an event but I would use CancelEventArgs anyway, it's friendly, people know it and know how to use it and with it the actual action can be canceled from the partial methods.
These two should be added too to the list of the existing ones that fire after their actual action:
I don't like that OnAdded() name but if Add was adopted instead of Insert then we must stick with it.
And that's it... With these partials I think we cover all the befores and afters of the actual data persistence methods giving us a greater flexibility to do whatever we want we our data.
I can implement this but I'm always afraid of touching the tt files because future updates will wipe off all my custom changes! :)
Thanks!
Alex
在 2.x 中,您可以重写 BeforeInsert 和 BeforeUpdate 方法。
我认为您需要在 ActiveRecord.tt 文件中添加 OnSaving 方法。 将其放在 OnSaved() 信号旁边:
然后更新您的 ActiveRecord.tt 文件。 我看到的 2 个更改:
更新 Update 方法
,然后更新 Add 方法
最后,您需要使用部分类来重写 OnSaving() 方法来更新值。 我正在做一些非常相似的事情,因为我没有使用modifiedby和createdon的约定(我在那里有下划线)。
In 2.x, there was a BeforeInsert and BeforeUpdate methods you could override.
I think you need to add an OnSaving method in the ActiveRecord.tt file. Place this next to the OnSaved() sig:
Then update your ActiveRecord.tt file. 2 changes that I see:
Update the Update method
and then update the Add method
Finally, you need to use your partial classes to override the OnSaving() method to update the values. I'm doing something very similar since I'm not using the convention of modifiedby and createdon (I have underscores there).
您可以使用分部类机制来创建您自己的 Save 版本,该版本会进行验证并调用 SubSonic 生成的 Save。 例如
You can use the partial class mechanism to create your own version of Save which does validation and calls the SubSonic generated Save. e.g.
每个 ActiveRecord 类都带有一个部分“OnSave()”方法,因此您需要做的就是创建一个部分,然后覆盖部分 OnSave() - 就像在 Linq To Sql 中一样:
Each ActiveRecord class comes with a partial "OnSave()" method so all you need to do is create a partial and then override the partial OnSave() - just like in Linq To Sql: