Я новичок в замке 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?