Linq'den SQL öğesine klonlama gereksinimim var. genel olarak: CloneUtils.Clone() yeni varlığa orijinal varlıktan kopyaya veri kopyalamak için yansıma kullanan basit bir jenerik yöntemdirLinq'den Sql'ye klonlama Varlık - veri içeriğinin çıkarılması
Customer origCustomer = db.Customers.SingleOrDefault(c => c.CustomerId == 5);
Customer newCustomer = CloneUtils.Clone(origCustomer);
newCustomer.CustomerId = 0; // Clear key
db.Customers.InsertOnSubmit(newCustomer);
db.SubmitChanges(); // throws an error
.
Ben sorun olduğunu ben denemek ve veritabanına geri yeni varlık eklerken, aşağıdaki hatayı alıyorum:
bir girişimde belki takın ya da yeni olmayan bir varlık ekleme için yapılmıştırbaşka bir DataContext'ten yüklenmiş. Bu desteklenmiyor.
Klonlanmış varlığı veri bağlamından ayırmanın kolay/genel bir yolunu bulamıyorum. Ya da bağlam ile ilgili alanları 'atlamak' için klonlama yöntemimi ayarlayabilir miyim?
Beni doğru yöne yönlendiren var mı?
Teşekkürler.
public static T ShallowClone<T>(T srcObject) where T : class, new()
{
// Get the object type
Type objectType = typeof(T);
// Get the public properties of the object
PropertyInfo[] propInfo = srcObject.GetType()
.GetProperties(
System.Reflection.BindingFlags.Instance |
System.Reflection.BindingFlags.Public
);
// Create a new object
T newObject = new T();
// Loop through all the properties and copy the information
// from the source object to the new instance
foreach (PropertyInfo p in propInfo)
{
Type t = p.PropertyType;
if ((t.IsValueType || t == typeof(string)) && (p.CanRead) && (p.CanWrite))
{
p.SetValue(newObject, p.GetValue(srcObject, null), null);
}
}
// Return the cloned object.
return newObject;
}
Teşekkür ederim Marcus - bu mükemmel çalıştı – Neilski