C# OnSave在Castle ActiveRecord中如何工作?
我是Castle ActiveRecord的新手,在保存对象之前更新对象有点困难。在阅读完文档后,我希望OnSave或BeforeSave总是在数据库调用之前更新对象,但事实似乎并非如此 有时设置值,有时不设置。我尝试了OnSave和BeforeSave,从NH Prof中可以看出,有时值只是空的。我试过刷新、保存刷新、保存副本等,但没有改变 以下是我的示例代码:C# OnSave在Castle ActiveRecord中如何工作?,c#,nhibernate,castle-activerecord,C#,Nhibernate,Castle Activerecord,我是Castle ActiveRecord的新手,在保存对象之前更新对象有点困难。在阅读完文档后,我希望OnSave或BeforeSave总是在数据库调用之前更新对象,但事实似乎并非如此 有时设置值,有时不设置。我尝试了OnSave和BeforeSave,从NH Prof中可以看出,有时值只是空的。我试过刷新、保存刷新、保存副本等,但没有改变 以下是我的示例代码: [ActiveRecord] public class Blog : ActiveRecordValidationBase<B
[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 */
)
[ActiveRecord]
公共类博客:ActiveRecordValidationBase
{
[PrimaryKey]公共整数Id{get;set;}
[Property]公共日期时间CreatedOn{get;set;}
[属性]公共字符串名称{get;set;}
[Property]公共字符串作者{get;set;}
受保护的覆盖void OnSave()
{
Author=“测试作者1”;
base.OnSave();
}
}
//在测试中:
var blog=newblog{Name=“First blog”,CreatedOn=DateTime.UtcNow};
blog.Save();
插入博客(
CreatedOn,
名称
作者
)
价值观(
'2011-07-25T14:48:06.00'/*@p0*/,,
“第一博客”/*@p1*/,
NULL/*@p2*/
)
这是一个冲洗问题,我不明白OnSave是如何工作的,还是其他原因?我使用的是Nuget的beta 3.0版ActiveRecord,这就是问题所在吗?任何帮助都会很好,谢谢
更新
在看了更多之后,我想我看到了问题所在。当字段不可为空时,插入失败。但是,如果该字段可为空,则会背靠背地生成单独的Insert和Update命令,并且可以正常工作
是否可以在OnSave with ActiveRecord中设置数据库中不可为空的字段?您可以覆盖
Save()
方法并在那里实现您的逻辑,方法与使用OnSave时的方法类似,它应该可以按照您的需要工作