【发布时间】:2013-09-18 10:52:12
【问题描述】:
我必须在数据库中插入一些记录,但这需要 20-25 秒左右的时间。我有两种方法,第一种方法包含一个带有列表类型参数的foreach 循环,第二种方法有一些 Linq 查询来保存和删除一些记录。代码如下。
public void InsertAssignment(List<TIVGroupItem> Item)
{
using (var tr = session.BeginTransaction())
{
try
{
foreach (var item in Item)
{
ak_tIVGroupItemSelector_Insert(item);
}
tr.Commit();
}
catch (Exception ex)
{
tr.Rollback();
CusException cex = new CusException(ex);
cex.Write();
}
}
}
第二种方法
public void ak_tIVGroupItemSelector_Insert(TIVGroupItem GroupItem)
{
try
{
var result = (from i in session.Query<TIVGroupItem>()
where i.Id == GroupItem.Id
select i).SingleOrDefault();
if (result != null)
session.Delete(result);
session.Save(GroupItem);
}
catch (Exception ex)
{ CusException cex = new CusException(ex);
cex.Write();
}
}
项目列表包含一些记录。那么我如何才能在这类问题上提高我的表现。有什么方法可以提高我在数据库中保存记录的性能?
【问题讨论】:
-
不要单独查询每个项目,以便删除它。而是查询所有项目,将它们全部标记为删除,然后将整个批次提交回数据库。
-
你能把
session.Query<TIVGroupItem>()移动到InsertAssignment并作为参数传递给ak_tIVGroupItemSelector_Insert吗? -
亚历山德罗·德安德里亚:我没听懂你。
-
删除再插入有什么意义?更新不是更好吗?
-
java版本的hibernate有
session.saveOrUpdate(object)。第一种方法,能不能把_tIVGroupItemSelector_Insert(item);换成session.saveOrUpdate(item);?
标签: c# sql linq nhibernate