Я новичок в Castle 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, или это что-то еще? Я использую бета-версию ActiveRecord 3.0 от Nuget, в этом ли проблема? Любая помощь была бы замечательной, спасибо.
Обновить
Посмотрев на это подробнее, я думаю, что вижу проблему. Если поле не допускает значения NULL, вставка не выполняется. Но если поле допускает значение NULL, отдельные команды Insert и Update генерируются один за другим, и это работает.
Могу ли я установить в базе данных поле, не допускающее значения NULL, в OnSave с помощью ActiveRecord?