如果要在应用程序中插入,删除或更新一小组实体(例如10个或更少),执行必要数据库操作的最佳方法是什么?是否应该发出多个查询,每个实体受一个影响?或者是否应该使用某种可由数据库引擎解析的XML构造,以便只需要发出一个命令?
我问这个是因为我当前商店的常见模式似乎是格式化包含所有更改的XML文档,然后将该字符串发送到数据库以由数据库引擎的XML功能处理。但是,考虑到要执行的任务的简单性,以这种方式使用XML似乎相当麻烦。
答案 0 :(得分:1)
您没有提到您正在使用的数据库,但在SQL Server 2008中,您可以使用表变量将这样的复杂数据传递给存储过程。将其解析并执行操作。有关详细信息,请参阅Scott Allen关于ode to code的文章。
答案 1 :(得分:1)
这取决于您需要执行的操作数量以及需要运行的速度。如果它只是少数几个,那么使用你用于单个操作的任何机制一次一个地完成它们将会正常工作。
如果您需要执行数千或更多,并且需要快速运行,则应重新使用连接和命令,在每次迭代期间将参数的参数更改为查询。这将最小化资源使用。您不希望为每个操作重新创建连接和命令。
答案 2 :(得分:0)
大多数数据库支持BULK UPDATE或BULK DELETE操作。
答案 3 :(得分:0)
从“业务实体”设计的角度来看,如果您对每组实体进行不同的操作,您应该让每个实体都处理自己的持久性。
如果存在常见的批处理活动(例如“删除所有早于x日期”),我会在执行批量更新或删除的集合类上编写静态方法。我通常让实体以原子方式处理它们自己的插入。
答案 4 :(得分:0)
答案取决于您所谈论的数据量。如果你在内存中有一个相当小的记录集,你需要同步回磁盘,那么多个查询可能是合适的。如果它是一组更大的数据,您需要查看其他选项。
我最近不得不实现一种机制,其中外部数据提供给了我~17,000行dta,我需要与本地表同步。我在那里选择的解决方案是将外部数据加载到临时表中,并调用在数据库中完全完成同步的存储过程。