EF 多线程多表更新的问题

starring 2012-12-23 04:35:56
有个需求需要定时接收数据,然后插入或更新到数据库。
代码如下:
//业务方法
void InsertLog(string gameId, string sellerName, string buyerName, string orderId, string orderTime, string orderLog)

LogBll.CreatInStance().SaveLogInfo(logInfo, orderInfo, updateOrderType, isOperatorOrder, orderJobInfo); //调用保存数据方法

///保存数据
public int AddObjects(LogInfo logInfo, OrderInfo orderInfo, UpdateOrderType updateOrderType, bool isOperatorOrder, OrderJobInfo orderJobInfo)
{
OrderInfo oldOrderInfo = Logistics.Data.Common.IOC.CommonService.OrderService.GetOrderInfo(orderInfo.OrderId);
if (oldOrderInfo == null)
{
Context.OrderInfo.Add(orderInfo);
}
else if (oldOrderInfo.OrderState != orderInfo.OrderState)
{
Context.OrderInfo.Attach(orderInfo);
Context.Entry(orderInfo).State = EntityState.Modified;
}
if (isOperatorOrder) Context.OrderJobInfo.Add(orderJobInfo);
LogInfo log = Logistics.Data.Common.IOC.CommonService.LogService.GetLogInfo(logInfo.Id);
if (log == null)
Context.LogInfo.Add(logInfo);
return Context.SaveChanges();
}
...全文
229 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
我是小李 2012-12-25
  • 打赏
  • 举报
回复
1、事务是否是在循环内声明的。如是的话应修改。 2、弄清楚约束 'PK_OrderInfo'这个约束是对应的什么字段。然后用公共变量来解决这个问题。
starring 2012-12-23
  • 打赏
  • 举报
回复
System.Threading.Thread aThread1 = new Thread(new ThreadStart(Test)); System.Threading.Thread aThread2 = new Thread(new ThreadStart(Test)); aThread1.Start(); aThread2.Start(); public void Test() { var gameId = "f44eb447e7e049c38eb13dc962f72a68"; var sellerName = "冰"; var buyerName = "test11"; var orderNo = DateTime.Now.ToString("yyyyMMddHHmmssff"); var orderTime = DateTime.Now.ToString(); var orderLog = "0"; for (int i = 1; i < 15; i++) { if (i == 13) orderLog = "400"; else if (i == 14) orderLog = "500"; else orderLog = (Convert.ToInt32(orderLog) + 10).ToString(); orderTime = DateTime.Now.AddHours(1).AddMinutes(1).AddSeconds(1).AddMilliseconds(1).ToString(); Logistics.Data.ReceiveData.HandlerLog handlerLog = new HandlerLog(); handlerLog.InsertLog(gameId, sellerName, buyerName, orderNo, orderTime, orderLog); } } 上面的方法 单线程操作一点问题都没有。 但如果aThread1 aThread2 都运行就出现如下问题: 1.如果分配给命令的连接位于本地挂起事务中,ExecuteNonQuery 要求命令拥有事务。命令的 Transaction 属性尚未初始化。 2.违反了 PRIMARY KEY 约束 'PK_OrderInfo'。不能在对象 'dbo.OrderInfo' 中插入重复键。 求大虾们指导,求解决方案

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧