我最近使用Linq开发了一个C#应用程序。 我从外部数据库获取了我需要处理的配置文件列表,有些是新的,有些已经在数据库中,需要更新。 我今天做的是查看配置文件列表并检查每个配置文件是否存在我更新否则插入 - 此解决方案工作正常。
我确信有一种方法可以使用批量插入/更新UPDATE ON DUPLICATE之类的东西,这样我可以节省时间,因为我得到的文件很大,并且已知批量插入/更新具有更好的性能。我想避免我现在使用的迭代。
insertall对已存储的行不起作用,我需要更新和插入
的组合这是我的代码,非常感谢您的帮助。
foreach (Profile tmpProfile in profiles)
{
try
{
var matchedProfile = (from c in db.ProfileEntities
where c.ProfileId == tmpProfile.Id
select c).SingleOrDefault();
if (matchedProfile == null)
{
//Insert
db.ProfileEntities.InsertOnSubmit(EntityMapper.ToEntity(tmpProfile));
}
else
{
//Update
EntityMapper.ToEntity(ref matchedProfile, tmpProfile);
}
}
catch (System.Data.SqlServerCe.SqlCeException sqlExec)
{
}
catch (Exception e)
{
}
}
db.SubmitChanges();
答案 0 :(得分:2)
一种可能的优化方法是创建一个包含外部应用程序所有项目的列表,然后从数据库中读取所有匹配的项目,而不是多次往返。
然后,您可以更新所有这些内容,插入剩下的所有内容并在结尾处调用SubmitChanges - 然后您将有2次往返数据库,而不是每次外部检索到一次。
我不知道Linq to SQL中的任何批量更新或插入功能