OnSave如何在Castle ActiveRecord中工作?

时间:2011-07-25 15:01:35

标签: c# nhibernate castle-activerecord

我是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中设置数据库中的非可空字段吗?

1 个答案:

答案 0 :(得分:0)

您可以覆盖

    Save()

方法并以与OnSave类似的方式在那里实现您的逻辑,它应该按照您的需要工作。