【问题标题】:How does OnSave work in Castle ActiveRecord?OnSave 如何在 Castle ActiveRecord 中工作?
【发布时间】:2011-08-01 22:48:14
【问题描述】:

我是 Castle ActiveRecord 的新手,在保存对象之前更新对象有点困难。阅读文档后,我希望 OnSave 或 BeforeSave 总是在数据库调用之前更新对象,但情况似乎并非如此。

有时该值已设置,有时则未设置。我已经尝试过 OnSave 和 BeforeSave,根据我在 NH Prof 中的判断,有时值只是 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,是这个问题吗?任何帮助都会很棒,谢谢。

更新

看了这个之后,我想我明白了这个问题。当该字段不可为空时,插入失败。但是,如果该字段可以为空,则将连续生成单独的插入和更新命令并且它可以工作。

我可以在 OnSave 中使用 ActiveRecord 设置数据库中的不可为空的字段吗?

【问题讨论】:

    标签: c# nhibernate castle-activerecord


    【解决方案1】:

    你可以覆盖

        Save()
    

    以与使用 OnSave 类似的方式在那里执行和实现您的逻辑,它应该可以按您的意愿工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      相关资源
      最近更新 更多