Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# OnSave在Castle ActiveRecord中如何工作?_C#_Nhibernate_Castle Activerecord - Fatal编程技术网

C# OnSave在Castle ActiveRecord中如何工作?

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

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

有时设置值,有时不设置。我尝试了OnSave和BeforeSave,从NH Prof中可以看出,有时值只是空的。我试过刷新、保存刷新、保存副本等,但没有改变

以下是我的示例代码:

[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时的方法类似,它应该可以按照您的需要工作