2010-06-01 78 views
2

我想通过linq更新实体,但由于在序列化后在视图中编辑了实体,因此我没有直接访问数据中的实体上下文。我可以这样做:通过LINQ to SQL中的新对象更新实体

entity.property1 = obj.property1; 
entity.property2 = obj.property2; 
... 

多数民众赞成在酷不...凉爽的一切。

我想接下来的事情是通过.attach做()像这样:

context.Table.attach(entity, obj); 

也不起作用。那么是否有另一种选择没有反思?

+0

什么用 “附加” 的情况下发生了什么? – 2010-06-01 20:18:35

+0

那么在这种情况下,我会分离实体,我认为这实际上不是它应该使用的方式。由于没有分离方法(http://blogs.microsoft.co.il/blogs/bursteg/archive/2007/11/21/linq-to-sql-table-lt-t-gt-detach-method-does -not-exist.aspx),我实际上不知道如何附加一些东西。有一种方法(http://www.codeproject.com/KB/linq/linq-to-sql-detach.aspx),但坦率地说,我不喜欢修改模型。我想实现我想要的最简单的方法就是使用反射。 – 2010-06-02 16:51:16

回答

0

Attach()不工作,因为实体仍然附加到DataContext。您是否考虑过在重新连接实体时创建DataContext的新实例?通常建议不要使用长寿命的DataContext,而应该为每个工作单元创建一个新实例。这是因为只要你在内存中保存一个DataContext实例,你从它中检索到的所有实体都会保留在内存中(假设启用了ObjectTracking)。

从MSDN:

一般来说,一个DataContext实例 设计寿命为一个“ 工作单位”但是你的应用程序定义 这个词。一个DataContext是 轻量级,并且对于 创建并不昂贵。典型的LINQ to SQL 应用程序在方法范围创建DataContext 实例或作为 代表相关 数据库操作的逻辑集的短命类成员。

http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.aspx

+0

毕竟我使用递归,但你的答案是健全的:-)谢谢 – 2010-06-05 14:40:10