0

我已经从 MS 扩展了 2011 年的客户门户,具有添加订单的功能。

现在,当 2 个或更多用户尝试同时创建订单时,我遇到了一个问题。

首先,我创建了 SalesOrder:

order = new SalesOrder();
order.SalesOrderId = OrderID;
order.Name = string.Format("Order {0}", DateTime.Now); 
order.CustomerId = parentCustomer;
order.PriceLevelId = priceLevel.ToEntityReference();

OrderID = XrmContext.Create(order);

在此之后,我添加了带有 foreach 的产品(SalesOrderDetail):

foreach (var product in OrdredProducts)
{
    productToAdd = new SalesOrderDetail
    {
        SalesOrderId = new CrmEntityReference(SalesOrder.EntityLogicalName, 
                                              OrderID),
        ProductId = new EntityReference(Product.EntityLogicalName, 
                                        product.ProductID),
        Quantity = product.Quantity
    };
    XrmContext.Create(productToAdd);
}

当只有一个用户订购东西时,这很好用。但是,如果有 2 个以上的用户,两个用户都会出错。

所以我将代码更改为:

order = new SalesOrder();
OrderID = Guid.NewGuid();
order.SalesOrderId = OrderID;
order.Name = string.Format("Order {0}", DateTime.Now); //:d
order.CustomerId = parentCustomer;
order.PriceLevelId = priceLevel.ToEntityReference();
XrmContext.AddObject(order);

foreach (var product in OrdredProducts)
{
    productToAdd = new SalesOrderDetail
    {
        SalesOrderId = new CrmEntityReference(SalesOrder.EntityLogicalName, 
                                              OrderID),
        ProductId = new EntityReference(Product.EntityLogicalName, 
                                        product.ProductID),
        Quantity = product.Quantity
    };
    XrmContext.AddObject(productToAdd);
}

XrmContext.SaveChanges();

现在,如果有 2 个以上的用户订购了东西,那么只有一个用户失败了,而不是像第一次尝试一样。

到目前为止我遇到的错误(每次都是另一个):

  • ValidateOpen - 在不应该处置时遇到已处置的 CrmDbConnection
  • SQL 超时已过期。
  • 一个意料之外的问题发生了。
  • 检索组织 {guid) 的下一个编号 (currentordernumber) 时出错:返回值为空
  • System.InvalidOperationException:Microsoft Dynamics CRM 遇到错误。管理员或支持的参考编号:#F60BF6A2

有没有人有一些建议可能是问题所在?是 SQL Server/CRM 服务器/IIS/我的代码还是不同的东西?

附加信息

  • SQL Server 和 CRM Server 不在同一台机器上
  • 我在 VS2012 服务器中测试时遇到同样的错误(后端是同一个 SQL/CRM 服务器)
  • 当一个用户运行 IIS 和一个用户运行 VS2012(调试)时,我得到同样的错误

编辑
XrmContext 是一个 XrmServiceContext 类型,它是从 CrmOrganizationServiceContext 派生的,这个是用 crmsvcutil 生成的

4

1 回答 1

0

如果有人遇到同样的问题,我解决了以下问题:

首先,我创建了 SalesOrder 并将其添加到 CRM:

public void AddToCrm(Entity entity)
{
     XrmContext.AddObject(entity);
}

然后我创建了所有订单(SalesOrderDetail)并将它们添加到 CRM(与上述相同的功能)。
最后我保存了它:

public void SaveToCrm()
{
    XrmContext.SaveChanges();
}

这种行为就像数据库中的事务。
所以所有其他订单都必须等到这个订单完成。

于 2013-08-28T08:12:42.560 回答