【问题标题】:Make DataContext continue to insert if errors occur如果发生错误,使 DataContext 继续插入
【发布时间】:2012-11-28 20:51:35
【问题描述】:

我正在使用 c# 中的 DataContext 对象和 Linq to SQL。我正在尝试将愿望清单上的愿望投票转移到管理员已确定第一个问题与其重复的问题。但是,由于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 似乎是个坏主意。有什么建议吗?

【问题讨论】:

    标签: c# linq-to-sql datacontext


    【解决方案1】:

    无需每次都创建一个新的DataContext;您可以重复使用同一个,并像现在一样简单地循环调用,否则。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-24
      • 2011-05-11
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-18
      相关资源
      最近更新 更多