【发布时间】: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