如何解决如何使用LINQ将临时表迁移到SQL?
| 我有两个表:contact和contact_temps。 contact_temps表镜像了contacts表。我想做的只是从临时表中提取记录并将其插入联系人。之后,我将从contact_temps表中删除这些记录。 下面的代码仅迁移一条记录,而不会从临时表中删除任何内容。我该如何解决我的问题?谢谢。 // migrate temp profile(s)...
var tempProfilesToMigrate = from ct in db.contact_temps
where ct.SessionKey == contact.Profile.SessionId
select new contact();
db.contacts.InsertAllOnSubmit(tempProfilesToMigrate);
db.SubmitChanges();
//...clear temp table records
var tempProfilesToDelete = from ct in db.contact_temps
where ct.SessionKey == contact.Profile.SessionId
select ct;
db.contact_temps.DeleteAllOnSubmit(tempProfilesToDelete);
db.SubmitChanges();
解决方法
我想知道您的\“ Insert All on Submit \”是否导致实体与db.contacts关联。尝试这个。
// migrate temp profile(s)...
var tempProfiles = from ct in db.contact_temps
where ct.SessionKey == contact.Profile.SessionId
select ct;
foreach (var c in tempProfiles)
{
Contact newC = new Contact();
newC.Name = c.Name;
// copy other values
db.contacts.InsertOnSubmit(newC);
}
// WAIT! do it at once in a single TX => avoid db.SubmitChanges() here.
db.contact_temps.DeleteAllOnSubmit(tempProfiles);
// Both sets of changes in one Tx.
db.SubmitChanges();
您还可以编写一个存储过程并将其导入到db上下文中,然后调用它。
, var result = db.ExecuteCommand(\“插入联系人,然后从* contact_temp中选择*,其中SessionKey = {0} \”,contact.Profile.SessionId);
当然,那只是我的头上的事,但是您明白了。最好将迁移和删除放入存储过程中。您使用的方法将使所有contact_temp记录往返两次(一次来回插入,一次删除)。
附言谷歌“对第一个存储过程进行编码”,以提供一种使用EF 4.1调用存储过程的方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。