如果发生错误,则继续插入DataContext

时间:2012-11-28 20:51:36

标签: c# linq-to-sql datacontext

我正在使用DataContext对象和Linq to SQL in c#。我试图将愿望清单上的愿望的投票转移到管理员已确定第一个问题是重复的问题。但是,由于vote表具有WishIdUserId作为主键,如果用户已经对目标愿望进行了投票,则插入将失败。我想要做的是忽略这些情况(在插入之前不查询vote表)并插入所有有效的投票。这就是我想做的事。

using (linqWishesDataContext dataContext = new linqWishesDataContext())
{
    try
    {
        dataContext.WishlistUpvotes.InsertAllOnSubmit(destinationVotes);
        dataContext.SubmitChanges(ConflictMode.ContinueOnConflict);
    }
    catch{}
}

我现在的一个解决方案就是这样做:

foreach (WishlistUpvote vote in destinationVotes)
{
    using (linqWishesDataContext dataContext = new linqWishesDataContext())
    {
        try
        {
            dataContext.WishlistUpvotes.InsertOnSubmit(vote);
            dataContext.SubmitChanges();
        }
        catch { }
    }
}

但如果需要移动几百或几千张投票,那么为每次投票创建新的DataContext似乎是一个坏主意。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

每次都不需要创建新的DataContext;您可以重复使用同一个,只需像现在一样循环调用,否则。

using (linqWishesDataContext dataContext = new linqWishesDataContext())
{
    foreach (WishlistUpvote vote in destinationVotes)
    {
        try
        {
            dataContext.WishlistUpvotes.InsertOnSubmit(vote);
            dataContext.SubmitChanges();
        }
        catch { }
    }
}

当然,这将为每次更新发出单独的命令。 (虽然ADO.NET连接池仍将在幕后工作,所以它不是 可怕)没有手动构建插入的SQL,我不知道你还能做什么。数据上下文将对事务中对SubmitChanges()的一次调用进行所有更改,这就是您获得“全有或全无”行为的原因。