LINQ-to-SQL方法Table<T>.Attach()
和Table<T>.AttachAll()
的确切含义是什么?它们的正确使用示例/情况是什么?
另外,请查看此相关问题:如何从DataContext的跟踪机制中分离LINQ-to-SQL数据对象?
LINQ-to-SQL方法Table<T>.Attach()
和Table<T>.AttachAll()
的确切含义是什么?它们的正确使用示例/情况是什么?
另外,请查看此相关问题:如何从DataContext的跟踪机制中分离LINQ-to-SQL数据对象?
这在将数据序列化/反序列化到其他层的多层应用程序中非常有用。
Attach()
方法告诉 DataContext 实体不是新实体(对于 插入),而是一个要在数据库中进行更新的已更新实体。
您有一个包含实体的DataContext。新实体被插入,现有实体被更新。现在,您需要将某些实体发送到另一个层,DataContext 然后会分离该实体并将其发送出去。
在其他层中,该实体被修改并发送回您的数据层。现在拥有您的实体的先前DataContext可能不再存在(例如,如果它是无状态的)或者不知道您的反序列化实体,那么该怎么办呢?创建新的DataContext或使用现有的DataContext并使用 Attach()
方法-这样DataContext就知道该实体意味着更新,不应将其插入到数据库中。
AttachAll()
方法也是如此,但适用于多个实体。
DataContext
的实体执行此操作 - 仅对分离的实体使用它。如果没有Attach,您的实体将被标记为新插入的。当然,当您要求更新时才会执行更新本身 - 而不是在调用Attach
时。 - Jaroslav JandekAttach(object,True)
(需要某个版本号或禁用跟踪)或Attach(objectModified, objectOriginal)
,它会计算出更改的内容并进行更新。仅仅附加似乎没有任何作用。 - Piotr Kula