克隆LINQ to SQL对象实体

默认情况下,同一Linq查询都会收到对内存中同一对象的引用。

此时不论更改第几次的查询结果,都将映射到对象的引用。

此时,若需要对某个结果进行快照并做其他修改,则需要对此对象进行克隆。

本代码将利用MemoryStream对内存中的对象进行复制。

    public static class CloneEntityHelper {
        public static T Clone<T>(T source) {
            var dcs = new System.Runtime.Serialization.DataContractSerializer(typeof(T));
            using (var ms = new System.IO.MemoryStream()) {
                dcs.WriteObject(ms, source);
                ms.Seek(0, System.IO.SeekOrigin.Begin);
                return (T)dcs.ReadObject(ms);
            }
        }
    }

使用示例:

var source = myQuery.First();
var cloned = Clone(source);

代码来源:LINQ to SQL tips and tricks #2

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据