0
添加一个实体我试图合并使用两个相同的架构数据库之间的数据的LINQ到SQL:从另一个DataContex在LINQ
List<Contact> contacts = (from c in oldDb.Contact
select c).ToList();
contacts.ForEach(c => c.CreatedByID = 0);
newDb.Contact.InsertAllOnSubmit(contacts);
newDb.SubmitChanges();
仅仅抛出一个“尝试已经取得了附加或添加不是新的实体,可能是从另一个DataContext加载的,不支持。“例外。
除执行以下操作,还能怎么这个被一般做(在合理的执行时间):
List<Contact> contacts = (from c in oldDb.Contact
select c).ToList();
contacts.ForEach(c => { c.CreatedByID = 0; newDb.Contact.InsertAllOnSubmit(contacts); });
newDb.SubmitChanges();
连同:
private t GetNewObject<t>(t oldObj)
{
t newObj = (t)System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(typeof(t).Name);
PropertyInfo[] props = typeof(t).GetProperties();
foreach (PropertyInfo _prop in props)
{
_prop.SetValue(newObj, _prop.GetValue(oldObj, null), null);
}
return newObj;
}
的问题是这种方法是相当慢时只有11个对象和75个属性,我需要为数十万个对象执行此操作,所以我可以在此处获得的任何性能提升都会大大减少总体运行时间。
基本上,是否有任何Detach或类似的调用我可以做,将断开旧的DataContext的现有对象,并将它们连接到新的DataContext。无需为每个返回的行创建所有新对象。
有没有办法做到这一般地,看到我的问题在这里http://stackoverflow.com/questions/3952160/setting-entityreft-properties-to-default-using-reflection – Seph 2010-10-17 05:32:03