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

なぜこれをしないのですか:

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 に答える
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 に答える