मुझे एक लिंक को SQL इकाई में क्लोन करने की आवश्यकता है। सिंहावलोकन में:एसक्यूएल एंटिटी के लिए एक लिंक क्लोन करना - डेटा संदर्भ को अलग करना
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
जहां CloneUtils.Clone() एक सरल सामान्य विधि प्रतिलिपि डेटा मूल इकाई से नई इकाई को कॉपी करने के लिए प्रतिबिंब का उपयोग करता है है।
समस्या मैं यह है कि जब मैं कोशिश करते हैं और नई इकाई डेटाबेस में वापस जोड़ने के लिए, मैं निम्नलिखित त्रुटि मिलती है:
का प्रयास संलग्न या इकाई नया नहीं है जोड़ें, शायद किया गया है एक और डेटाकॉन्टेक्स्ट से लोड किया गया है। यह समर्थित नहीं है।
मुझे डेटा संदर्भ से क्लोन इकाई को अलग करने का एक आसान/सामान्य तरीका प्रतीत नहीं होता है। या शायद मैं संदर्भ संबंधित क्षेत्रों को 'छोड़' करने के लिए अपने क्लोनिंग विधि को समायोजित कर सकता हूं?
क्या कोई मुझे सही दिशा में इंगित कर सकता है?
धन्यवाद।
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;
}
धन्यवाद मार्कस - जो पूरी तरह से काम करता है – Neilski