我已经从 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 生成的