我找到了下面的代码,它应该克隆一个实体。在我的例子中,我为一个人准备了一个表格,并且有多个垂直线用于电话号码、电子邮件等。当我尝试克隆一个个人实体时,代码似乎可以正常工作。但是,当我试图将对象添加到我的表中时,会出现以下错误。
“无法添加或附加对象,因为其EntityReference的EntityKey属性值与此对象的EntityKey不匹配。”
我不太确定要改变什么才能使这项工作发挥作用。
private static T DataContractSerialization<T>(T obj)
{
DataContractSerializer dcSer = new DataContractSerializer(obj.GetType());
MemoryStream memoryStream = new MemoryStream();
dcSer.WriteObject(memoryStream, obj);
memoryStream.Position = 0;
T newObject = (T)dcSer.ReadObject(memoryStream);
return newObject;
}
以下是我使用代码的方式。
public static void CopyData(int sourcecompanyid)
{
var rUtil = new CREntities();
rUtil.Connection.Open();
using (var r = new CREntities())
{
var candidates = r.Candidates.Include("Phones").Include("Emails").Where(c => c.companyId == sourcecompanyid);
foreach (var candidate in candidates)
{
ObjectParameter newcandid = new ObjectParameter("newcandid", typeof(string));
Candidate newcand = DataContractSerialization<Candidate>(candidate);
rUtil.GetNextCandId(newcandid);
newcand.CandID = newcandid.Value.ToString();
foreach (var phone in newcand.Phones)
phone.CandID = newcand.CandID;
foreach (var email in newcand.Emails)
email.CandID = newcand.CandID;
rUtil.Candidates.AddObject(newcand);
rUtil.SaveChanges();
}
}
rUtil.Connection.Close();
rUtil.Dispose();
}
private static T DataContractSerialization<T>(T obj)
{
DataContractSerializer dcSer = new DataContractSerializer(obj.GetType());
MemoryStream memoryStream = new MemoryStream();
dcSer.WriteObject(memoryStream, obj);
memoryStream.Position = 0;
T newObject = (T)dcSer.ReadObject(memoryStream);
return newObject;
}