0

我有一个基于 Jquery Droppable/Sortable 更新数据库的操作。第一个 AJAX 帖子工作正常,但第二个给我错误:

     New transaction is not allowed because there are other 
threads running in the session.

它被发布到同一控制器上的 2 个单独的操作,在控制器中使用相同的 UnitOfWork。不知道我必须做什么来解决这个问题。

编辑:这些是被调用的两种服务方法:

public void   NavItemSort(List<string> orderArray, string navID, string subNavID)
{

    var newOrderArray = orderArray.Where(s => !string.IsNullOrWhiteSpace(s)).ToList();

    var orderArrayIDs = newOrderArray.Select(x => x.Replace("ContentItem", "")).ToList();

    var itemToBeSorted = Convert.ToInt32(orderArrayIDs.FirstOrDefault());

    var itemContext = cmsUnitOfWork.NavigationItems.Find().Where(x => x.ID == itemToBeSorted).ToList().FirstOrDefault();



    var currentSortOrder = cmsUnitOfWork.NavigationItems.Find()
                                                        .Where(x => x.NavID == itemContext.NavID && 
                                                        (itemContext.ParentID == null) ? x.ParentID == null :  
                                                        x.ParentID == itemContext.ParentID).ToList();

    var existingItems = currentSortOrder.Select(x => x.ID).ToList();

    List<string> existingItemsString = existingItems.ConvertAll<string>(x => x.ToString()).ToList();

    var newNavItemID = existingItemsString.Except(orderArray).FirstOrDefault();

    var currentSortOrderExcept = currentSortOrder.Where(x => x.ID != Convert.ToInt32(newNavItemID));


    foreach (var x in currentSortOrderExcept)
        {
            int sortOrderInt = orderArrayIDs.IndexOf(orderArrayIDs.Where(z => int.Parse(z) == x.ID).ToList().FirstOrDefault()) + 1; 


            NavigationItem navigationItem = new NavigationItem()
            {
                HasChild = x.HasChild,
                Level = x.Level,
                NavID = x.NavID,
                ID = x.ID,
                ParentID = x.ParentID,
                PageID = x.PageID,
                URL = x.URL,
                Title = x.Title,
                SortOrder = sortOrderInt,

            };

            if (navigationItem.SortOrder != null && navigationItem.SortOrder != 0)
            {
                cmsUnitOfWork.NavigationItems.Update(x, navigationItem);

            }

        }
        cmsUnitOfWork.Commit();
}
public void NavItemAdd(List<string> orderArray, string NavID, string subNavID){

    var newOrderArray = orderArray.Where(s => !string.IsNullOrWhiteSpace(s)).ToList();
    var orderArrayIDs = newOrderArray.Select(x => x.Replace("ContentItem", "")).ToList();

    NavID = NavID.Replace("nav", "");

    int NavIDInt = int.Parse(NavID);
    int subNavIDInt = int.Parse(subNavID);

    var existingNavItems = cmsUnitOfWork.NavigationItems.Find().Where(x => x.NavID == NavIDInt && x.ParentID == subNavIDInt).ToList();

    int currentSortOrder = 0;

    if (existingNavItems.Count() != 0)
    {
        currentSortOrder = existingNavItems.Max(x => x.SortOrder);
    }


    var existingItems = existingNavItems.Select(x => x.ID).ToList();

    List<string> existingItemsString = existingItems.ConvertAll<string>(x => x.ToString()).ToList();

    var newNavItemID = orderArray.Except(existingItemsString).FirstOrDefault();
    int newNavIDInt = int.Parse(newNavItemID);

    var newNavItemList = cmsUnitOfWork.NavigationItems.Find().Where(x => x.ID == newNavIDInt).ToList();

    var newNavItem = newNavItemList.FirstOrDefault();

    var parentNav = cmsUnitOfWork.NavigationItems.Find().Where(x => x.ID == subNavIDInt).ToList().FirstOrDefault();

    NavigationItem navigationItemUpdated = new NavigationItem()
    {
        ID = newNavItem.ID,
        Level = 2,
        NavID = NavIDInt,
        PageID = newNavItem.PageID,
        Title = newNavItem.Title,
        URL = newNavItem.URL,
        ParentID = subNavIDInt,
        SortOrder = currentSortOrder + 1
    };

    cmsUnitOfWork.NavigationItems.Update(newNavItem, navigationItemUpdated);
    cmsUnitOfWork.Commit();


}
4

2 回答 2

0

我猜你是针对那个上下文启动了一个事务,你从不处理它,也不提交它。只是猜测,因为您没有丢失任何代码(请发布代码)

于 2013-01-14T06:05:42.243 回答
0

也许您已将 cmsUnitOfWork 声明为静态变量?必须在每个请求上创建和销毁上下文

于 2013-01-14T10:29:54.733 回答