【发布时间】:2009-09-09 21:24:44
【问题描述】:
我需要获取一行的主键,然后将其插入到字符串中的其他列中。
所以我尝试这样做:
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();我可以在对象中看到正确的值,但数据库永远不会更新,也不例外。 谢谢!
【问题讨论】:
-
您的 PK 是 int(身份)还是其他类似 GUID 的东西?
-
在一种情况下不是这样,这最终成为了问题。在另一种情况下......它只有在我执行以下操作时才会起作用:new page(ps => ps.page_id == pageId);
-
我认为这是唯一的方法。如果您的 PK 有一个自动编号(sql server 中的标识、Oracle 中的序列等),那么您可能需要在保存对象后通过查询来刷新该对象。我已经转移到几乎所有的 GUID 值,所以我可以通过代码创建我的 PK,设置值,然后 Save()。
标签: subsonic3