tags:

views:

258

answers:

1

Hi there,

I need to get the primary key for a row and then insert it into one of the other columns in a string.

So I've tried to do it something like this:

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

But it doesn't treat it as the same data object so newsObj.col_id always comes back as a zero. Is there another way of doing this? I tried this on another page and to get it to work I had to set newsObj.SetIsLoaded(true);

This is the actual block of code:

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();

If I hover the p.Save(); I can see the correct values in the object but the DB is never updated and there is no exception. Thanks!

+2  A: 

I faced the same problem with that :

po oPo = new po();

oPo.name ="test";

oPo.save(); //till now it works.

oPo.name = "test2";

oPo.save(); //not really working, it's not saving the data since isLoaded is set to false and the columns are not considered dirty.

it's a bug in the ActiveRecord.tt for version 3.0.0.3.

In the method public void Add(IDataProvider provider) immediately after SetIsNew(false); there should be : SetIsLoaded(true);

the reason why the save is not working the second time is because the object can't get dirty if it is not loaded. By adding the SetIsLoaded(true) in the ActiveRecord.tt, when you are going to do run custom tool, it's gonna regenerate the .cs perfectly.

Sylvain Cyr