代码之家  ›  专栏  ›  技术社区  ›  Nealv

合并在DataContext外部的对象

  •  0
  • Nealv  · 技术社区  · 14 年前

    我有以下问题: 用表单在数据库中插入对象很容易。

    1. 只需创建一个对象
    2. 将其链接到“发件人”中的字段。
    3. 发回控制器,
    4. 创建新的DataContext并执行DataContext.InsertonSubmit(对象)

    .

    public static void AddPage(string lang, Page page)
                    {
                        using (var db = new CardReaderDataContext())
                        {
                            page.Lang = lang;
                            page.URL = UrlHelper.CreateValidSeoUrl(page.Name, "-");
                            db.Pages.InsertOnSubmit(page);
                            db.SubmitChanges();
                        }
                    }
    

    但是,如果你想更新一个对象,这是一项乏味的工作。 你做同样的动作,

    1. 你得到了物体,
    2. 将其链接到表单,
    3. 贴出来,但是!!!! 因为它超出了您的DataContext,所以您必须从DataContext重新加载对象,
    4. 传输所有变量并保存, 这有点复杂,所以我举个例子:

    要更新在表单中修改的对象,请执行以下操作:

    public static void Update(Page page)
            {
                using (var db = new CardReaderDataContext())
                {
                    var _page = db.Pages.Where(p => p.Guid == page.Guid).Single();
                    _page.ModificationDate = DateTime.Now;
                    _page.Title = page.Title;
                    _page.Description = page.Description;
                    _page.Content = page.Content;
                    _page.Keywords = page.Keywords;
                    _page.Name = page.Name;
                    _page.WTLang = page.WTLang;
                    _page.WTSKU = page.WTSKU;
                    _page.WTTi = page.WTTi;
                    _page.WTUri = page.WTUri;
                    _page.URL = UrlHelper.CreateValidSeoUrl(page.Name, "-");
                    //  _page.Order = GetMaxOrderByMenuGuid(page.MenuGuid);
                    db.SubmitChanges();
                }
            }
    

    我不知道是否清楚,如果不评论我,我会编辑

    1 回复  |  直到 11 年前
        1
  •  1
  •   Frank Tzanabetis    14 年前

    我认为您正在查找dataContext.attach,但只能将其用于已序列化/反序列化的LinqToSQL对象。

    阅读这个问题的答案- http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/384a1c03-3acf-43ef-9a25-b84f93025e63/

    “即使是 尝试获取旧版本。通过 你这样做实际上是在转向 非乐观并发,所以除非 你的意思是这很糟糕 方法。你需要做的是 原状态和 对象的当前状态。“