Дозвуковой 3 Сохранить (), затем Обновить ()? - PullRequest
0 голосов
/ 10 сентября 2009

Мне нужно получить первичный ключ для строки, а затем вставить его в один из других столбцов в строке.

Итак, я попытался сделать что-то вроде этого:

newsObj = new news();
newsObj.name = "test"
newsObj.Save();
newsObj.url = String.Format("blah.aspx?p={0}",newsObj.col_id);
newsObj.Save();

Но он не обрабатывает его как один и тот же объект данных, поэтому newsObj.col_id всегда возвращается как ноль. Есть ли другой способ сделать это? Я попробовал это на другой странице, и чтобы заставить его работать, я должен был установить newsObj.SetIsLoaded(true);

Это фактический блок кода:

page p;

if (pageId > 0)
    p = new page(ps => ps.page_id == pageId);
else
    p = new page();

if (publish)
    p.page_published = 1;

if (User.IsInRole("administrator"))
    p.page_approved = 1;

p.page_section = staticParent.page_section;
p.page_name = PageName.Text;
p.page_parent = parentPageId;
p.page_last_modified_date = DateTime.Now;
p.page_last_modified_by = (Guid)Membership.GetUser().ProviderUserKey;
p.Add();
string urlString = String.Empty;
if (parentPageId > 0)
{
    urlString = Regex.Replace(staticParent.page_url, "(.aspx).*$", "$1");  // We just want the static page URL (blah.aspx)          
    p.page_url = String.Format("{0}?p={1}", urlString, p.page_id);
}
p.Save();

Если я наведите курсор мыши на p.Save (); Я могу видеть правильные значения в объекте, но БД никогда не обновляется, и нет никаких исключений. Спасибо!

1 Ответ

2 голосов
/ 14 января 2010

Я столкнулся с той же проблемой:

po oPo = new po ();

oPo.name = "test";

oPo.save (); // до сих пор это работает.

oPo.name = "test2";

oPo.save (); // на самом деле не работает, не сохраняет данные, поскольку isLoaded имеет значение false и столбцы не считаются грязными.

это ошибка в ActiveRecord.tt для версии 3.0.0.3.

В методе public void Add (провайдер IDataProvider) сразу после SetIsNew (false); должно быть: SetIsLoaded (true);

причина, по которой сохранение не работает во второй раз, заключается в том, что объект не может испачкаться, если он не загружен. При добавлении SetIsLoaded (true) в ActiveRecord.tt, когда вы собираетесь запустить пользовательский инструмент, он будет полностью регенерировать .cs.

...