LINQ To SQL オブジェクトを複製するための拡張メソッドがあります。
public static T CloneObjectGraph<T>(this T obj) where T : class
{
var serializer = new DataContractSerializer(typeof(T), null, int.MaxValue, false, true, null);
using (var ms = new System.IO.MemoryStream())
{
serializer.WriteObject(ms, obj);
ms.Position = 0;
return (T)serializer.ReadObject(ms);
}
}
しかし、すべての参照がロードされていないオブジェクトを運ぶ間、DataLoadOptions でクエリを実行しているときに、オブジェクトが破棄された例外がスローされることがありますが、ロードされていない参照 (null) は要求しません。
たとえば、多くの参照を持つ Customer があり、Address 参照 EntityRef<> をメモリに保持する必要があるだけで、他には何もロードしません。しかし、オブジェクトのクローンを作成している間、この例外により、すべての EntitySet<> 参照を Customer オブジェクトでロードする必要があり、負荷が大きすぎてアプリケーションの速度が低下する可能性があります。
助言がありますか?