2011-07-25 39 views
0

私はCastle ActiveRecordを初めて使用しています。オブジェクトを保存する前にオブジェクトを更新するのが少し難しいです。私はOnSaveまたはBeforeSaveがデータベース呼び出しの前にオブジェクトを常に更新することを期待していましたが、それはそうではないようです。城ActiveRecordでOnSaveはどのように機能しますか?

値が設定されることもありますが、時には値が設定されないことがあります。私はOnSaveとBeforeSaveの両方を試しましたが、NH Profを見てみると値がちょうどNULLになることがあります。私は、フラッシング、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のActiveRecordのベータ版を使用していますが、それは問題ですか?どんな助けも素晴らしいだろう、ありがとう。

を見た後に更新

は、このより私は問題を参照してくださいと思います。フィールドがNULL可能でない場合、挿入時に失敗します。しかし、フィールドがヌル入力可能な場合、別々のInsertコマンドとUpdateコマンドが連続して生成され、動作します。

ActiveRecordを使用してOnSaveにデータベース内のnull不可能なフィールドを設定することはできますか?あなたが望むよう

答えて

0

あなたは

Save() 

メソッドをオーバーライドして、あなたがのOnSaveでやっているのと同様の方法であり、あなたのロジックを実装することができ、それが動作するはずです。

関連する問題