这里有一点点,但我有一个客户对象回到我的控制器。我想重新连接这个对象回数据库,这甚至有可能吗?我知道有一个datacontext.customers.insertonsubmit(客户),但有没有相当于datacontext.customers.updateonsubmit(客户)???使用MVC框架RC1更新断开连接的LINQ对象
回答
您希望在数据上下文的customers表上使用attach方法。
datacontext.customers.Attach(customer);
将其重新连接到数据上下文。然后,您可以使用SubmitChanges()
来更新数据库中的值。
编辑:这只适用于通过序列化从原始数据上下文中分离出来的实体。如果您不介意额外调用数据库,则可以使用ASP.NET MVC中的惯用方法来再次检索对象,并通过UpdateModel或TryUpdateModel应用您的更改,如@Odd所示。
您从表单发布的客户将没有实体关键字,因此可能无法很好地连接,也可能没有客户的每个字段都可用于表单,因此可能没有设置所有字段。
我建议使用TryUpdateModel方法,在您的操作中,您必须再次从数据库获取客户并使用表单的后置变量更新它。
public ActionResult MySaveAction(int id, FormCollection form)
{
Customer updateCustomer = _Repository.GetCustomer(id);
TryUpdateModel(updateCustomer, "Customer", form);
_Repository.Save(updateCustomer);
}
你将不得不添加所有你自己的异常处理和验证当然,但这是一般的想法。
这是我不喜欢的关于LINQ到SQL的内容。
如果您在同一范围内查询和更新,它通常会正常工作,但如果您获取对象,请将其缓存,然后尝试稍后更新它,则不能。
这里是什么文件说:
使用与已经在一个DataContext的创建实体的连接方法,以及序列化到客户端,然后有意向反序列化回执行更新或删除操作。由于新的DataContext无法跟踪断开连接的实体的原始值,客户端负责提供这些值。在此版本的Attach中,假定实体处于其原始值状态。调用此方法后,可以更新其字段,例如使用客户端发送的其他数据。
不要尝试附加尚未通过序列化分离的实体。尚未序列化的实体仍与延迟加载程序保持关联,如果实体被第二个数据上下文跟踪,那么这些实体可能会导致意外的结果。
有点模棱两可的恕我直言,特别是关于什么意思是“序列化”和“反序列化”。
而且,有趣的是,这里是怎么说的DataContext对象:
一般来说,一个DataContext实例 设计寿命为一个“ 工作单位”但是你的应用程序定义 这个词。一个DataContext是 轻量级,并且对于 创建并不昂贵。典型的LINQ to SQL 应用程序在方法范围创建DataContext 实例或作为 代表相关 数据库操作的逻辑集的短命类成员。
因此,DataContexts的使用范围很广 - 而且要使用Attach(),您必须使用相同的DataContext来查询对象。我假设/希望我们完全误解了Attach()的真正用途。
我在这种情况下必须做的事情是重新查询我需要更新的对象以获取全新副本,然后执行更新。
- 1. 更新断开连接的对象图
- 2. 断开连接模式下的实体框架更新
- 3. 更新对象图时实体框架的断开行为
- 4. Chronos框架连接和从Mesos断开
- 5. 在LINQ To SQL中需要什么“断开连接的更新”?
- 6. 断开连接时的Firebase更新
- 7. Objective C - 使用Multipeer连接框架发送对象,没有连接对象
- 8. 更新ASP.NET MVC(实体框架)上的连接字符串
- 9. 刷新LINQ数据库连接对象
- 10. 更新使用LINQ的对象列表
- 11. LINQ通用连接和实体框架
- 12. C#MVC实体框架不更新对象的列表属性
- 13. 如何从连接池中删除断开的连接对象?使用c3p0
- 14. 对象与实体框架表连接
- 15. EF5多对多更新断开连接的场景
- 16. perl dbi重新连接断开连接
- 17. 实体框架:更新连接表
- 18. 尝试使用断开连接端口对象
- 19. C连接的对象#实体框架的更新,只有当改变
- 20. 更新连接上的套接字的用户信息并断开连接
- 21. 如何使用linq更新对象?
- 22. 如何使用DetailsView更新Linq对象?
- 23. linq在mvc中使用实体框架
- 24. 更新在linq中有子实体的断开连接的实体到sql
- 25. 更新LINQ中的对象
- 26. 实体框架更新现有对象
- 27. 实体框架 - 更新对象
- 28. 实体框架5 Entity.Entry缓慢断开连接的实体
- 29. 在断开连接的系统上安装金字塔框架
- 30. Nhibernate - 在断开连接的会话中引用瞬态对象
上次我跑过这个(几个月前)时,我总是在这个声明中遇到错误。一些关于(解释)“这个对象最初附加到另一个数据上下文”,它不能被附加...有没有最近改变 – 2009-02-03 21:38:15