我正在开发一个具有SCQL CE 4.0数据库的应用程序,我使用EF 4.3.1作为其ORM。 我需要从XML文件中加载100条记录来检查数据库(通过它们的GUID列),如果它们是新的,则插入它们,但如果其中一些已存在,我必须更新这些记录。
现在我想知道这个要求的最佳方法是什么?
目前我正在使用以下代码,但我认为它没有效率。
foreach( var record in xmlRecords )
{
var existingRecord = context.Records.SingleOrDefault(r => r.Guid == record.Guid);
if( existingRecord == null )
context.Records.Add(record);
else
context.Records.ApplyCurrentValues(record);
}
context.SaveChanges();
答案 0 :(得分:0)
这很好,其他的是使用存储过程将XML作为输入,然后使用XML编写插入和更新命令,但SQL CE不支持XML数据类型
答案 1 :(得分:0)
目前我正在使用以下代码,但我认为它没有效率。
听起来像你的作品。你是否完成了处理100条记录的测试?您是否有理由想要对此进行更优化?如果你的代码可以合理地处理100个记录(我认为在这种情况下合理的时间不到一两秒),这就是你的要求,那么你就完成了。实体框架,我想所有其他ORM都可以轻松处理更新100行。如果您担心将来需要处理更多记录,请创建一个包含适当数量记录的大型测试文件,并查看其执行情况。从那里优化。
如果它打破了,请不要修理它。在代码无法处理负载之前不要进行优化。您的用户无法区分1.1秒和1.1222秒之间的差异。
如果你确实需要优化某些东西,我会抛出你对窗口运行缓慢的假设。这几乎不是你所期望的。在代码中抛出一些计时器语句,看看是什么减慢了你的速度。
希望有所帮助。