合并一个在datacontext之外的对象

时间:2010-07-29 10:06:49

标签: asp.net-mvc linq linq-to-sql datacontext

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

  1. 只需创建一个对象
  2. 将其链接到您的来自的字段。
  3. 回到控制器,
  4. 创建一个新的datacontext并执行datacontext.InsertOnSubmit(object)
  5. 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. 传输所有变量并保存, 这有点复杂,所以我举了一个例子:
    5. 更新您在表单中修改的对象:

      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 个答案:

答案 0 :(得分:1)

我认为您正在寻找DataContext.Attach,但您只能将其用于已经序列化/反序列化的linqtosql对象。

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

  

“甚至也不是一个好主意   尝试获取旧版本。通过   这样做你实际上转向   关闭乐观并发,所以除非   你打算这是一个坏人   做法。你需要做的是   往返既有原始状态又有   对象的当前状态。“