0

请看以下代码:

public void UpdateChildPagesReWrittenUrl(int parentPageId)
    {
        var childPageList = db.PcPages.Where(m => m.ParentID == parentPageId);

        if (childPageList.Count() > 0)
        {
            foreach (var item in childPageList)
            {
                db.ExecuteNonQuery(string.Format("UPDATE pcPage SET Url = {0}/{1} WHERE PageID = {2}",
                    GetRootUrl(item.ParentID),
                    hnUrlHelper.UrlSafe(item.PageName), item.PageID));
                db.SaveChanges();
            }
        }

    }

当父页面更新页面名称本身时,我尝试更新所有子页面 url。这段代码我认为它有效。但不是。任何人都可以以更好的方式提出更好的建议吗?

4

3 回答 3

0

它在更新什么吗?您可以使用 SQL Profiler 查看实际发送的查询吗?

还可以设置一个断点并确保它按照您的预期进行。

于 2012-10-19T11:12:18.957 回答
0

尝试在新的 url 地址周围添加引号:

"UPDATE pcPage SET Url = '{0}/{1}' WHERE PageID = {2}"

另外我相信您可以更新子行而不获取它们

var query = @"UPDATE pcPage SET Url = Concat(ParentID, '/', PageName)
              WHERE ParentID = " + parentPageId; 
db.ExecuteNonQuery(query);
于 2012-10-19T11:19:22.080 回答
0

为什么不这样做:

public void UpdateChildPagesReWrittenUrl(int parentPageId)
{
    Func<PcPage, string> url = item => String.Format("{0}/{1}",
        GetRootUrl(item.ParentID), hnUrlHelper.UrlSafe(item.PageName));

    Array.ForEach(db.PcPages.Where(m => m.ParentID == parentPageId).ToArray(),
        x => { x.Url = url(x); });

    db.SaveChanges();
}
于 2012-10-19T12:01:26.550 回答