Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 合并在datacontext之外的对象_Asp.net Mvc_Linq_Linq To Sql_Datacontext - Fatal编程技术网

Asp.net mvc 合并在datacontext之外的对象

Asp.net mvc 合并在datacontext之外的对象,asp.net-mvc,linq,linq-to-sql,datacontext,Asp.net Mvc,Linq,Linq To Sql,Datacontext,我有以下问题: 使用表单在数据库中插入对象很容易 只需创建一个对象 将其链接到“发件人”中的字段 发回控制器 创建新的datacontext并执行datacontext.InsertOnSubmit(对象) 但是,如果要更新对象,这是一项乏味的工作。 你做同样的流程 你得到了目标 将其链接到您的表单 发布它,但是之后!!! 因为它超出了datacontext,所以必须从datacontext重新加载对象 传输所有变量并保存, 这是一个有点复杂的解释,所以我举一个例子: 要更新在表单中修改的对

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

  • 只需创建一个对象
  • 将其链接到“发件人”中的字段
  • 发回控制器
  • 创建新的datacontext并执行datacontext.InsertOnSubmit(对象)

  • 但是,如果要更新对象,这是一项乏味的工作。 你做同样的流程

  • 你得到了目标
  • 将其链接到您的表单
  • 发布它,但是之后!!! 因为它超出了datacontext,所以必须从datacontext重新加载对象
  • 传输所有变量并保存, 这是一个有点复杂的解释,所以我举一个例子:
  • 要更新在表单中修改的对象:

    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();
                }
            }
    

    我不知道是否清楚,如果不是注释我,我将编辑

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

    请阅读本问题的答案:

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


    您使用的是Linq to SQL吗?顺便说一句,你的问题到底是什么?是的,linq to sql,我的问题是,有没有更简单的方法在更新时合并这些对象,而不是针对每个值,将新值复制到从db检索的对象。现在您要做的是:从db中检索对象,修改值,检索相同的对象,将每个值存储到最后检索到的值,UpdateHMM是我的问题不清楚,或者只是没有答案据我所知,L2S就是这样做的。(在Entity Framework中,您可以使用EntityState来避免重新查询数据库。)这并不是一个真正的全局解决方案答案(我认为没有),但您提供的链接和其中的链接非常有用,让我对这个问题有了很好的了解
    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();
                }
            }