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重新加载对象 传输所有变量并保存, 这是一个有点复杂的解释,所以我举一个例子: 要更新在表单中修改的对
但是,如果要更新对象,这是一项乏味的工作。 你做同样的流程
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();
}
}