我是Castle ActiveRecord的新手,在保存对象之前更新对象有点困难。在阅读doco之后,我希望OnSave或BeforeSave在数据库调用之前始终更新对象,但情况似乎并非如此。
有时设定值,有时则不设定。我已经尝试过OnSave和BeforeSave,而且从NH教授的角度来看,有时值只是NULL。我已经尝试过Flushing,SaveAndFlush,SaveCopy等,没有任何变化。
这是我的示例代码:
[ActiveRecord]
public class Blog : ActiveRecordValidationBase<Blog>
{
[PrimaryKey] public int Id { get; set; }
[Property] public DateTime CreatedOn { get; set; }
[Property] public string Name { get; set; }
[Property] public string Author { get; set; }
protected override void OnSave()
{
Author = "Test Author 1";
base.OnSave();
}
}
// in a test:
var blog = new Blog { Name = "First Blog", CreatedOn = DateTime.UtcNow };
blog.Save();
INSERT INTO Blog (
CreatedOn,
Name,
Author
)
VALUES (
'2011-07-25T14:48:06.00' /* @p0 */,
'First Blog' /* @p1 */,
NULL /* @p2 */
)
这是一个昙花一现的问题,我不明白OnSave是如何工作的,还是其他的东西?我正在使用Nuget的Beta 3.0版ActiveRecord,这个问题是什么?任何帮助都会很棒,谢谢。
更新
在看了这个之后我觉得我看到了这个问题。当字段不可为空时,插入失败。但是如果字段可以为空,则单独的“插入”和“更新”命令会背靠背生成,并且可以正常工作。
我可以使用ActiveRecord在OnSave中设置数据库中的非可空字段吗?
答案 0 :(得分:0)
您可以覆盖
Save()
方法并以与OnSave类似的方式在那里实现您的逻辑,它应该按照您的需要工作。