Как OnSave работает в замке ActiveRecord? - PullRequest
0 голосов
/ 25 июля 2011

Я новичок в замке 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, или это что-то еще? Я использую бета-версию 3.0 ActiveRecord от Nuget, это проблема? Любая помощь будет отличной, спасибо.

Обновление

Посмотрев на это больше, я думаю, что вижу проблему. Когда поле не имеет значения NULL, оно не вставляется. Но если поле имеет значение NULL, отдельные команды вставки и обновления генерируются вплотную, и это работает.

Можно ли установить в базе данных необнуляемое поле в OnSave с ActiveRecord?

1 Ответ

0 голосов
/ 01 августа 2011

Вы можете переопределить метод

    Save()

и реализовать свою логику там аналогично тому, как вы это делаете с OnSave, он должен работать как вы хотите.

...