0

我正在使用DataContextc# 中的对象和 Linq to SQL。我正在尝试将愿望清单上的愿望投票转移到管理员已确定第一个问题与其重复的问题。但是,由于该vote表具有WishIdandUserId作为主键,如果用户已经对目标愿望进行了投票,则插入将失败。我想做的是忽略这些情况(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为每张选票创建一个新选票似乎是个坏主意。有什么建议么?

4

1 回答 1

1

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

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

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

于 2012-11-28T23:26:32.043 回答