出库单细表:
单号 行号 物料编号 入库数量 生产订单
IN986 1 A 100 PO97
IN986 2 B 200 PO97
IN986 3 A 400 PO86
IN986 4 B 600 PO86
-------------------
仓库库存表
物料编号 批号 库存量
A LOT91 80
A LOT96 600
B LOT75 150
B LOT82 900
------------------
如果不用存储过程,直接用.net业务处理层去做出库记帐,最佳效率的方案是怎样的?
------------------
我见过这样的.net方案:
1. 在一个出库单的业务组件 提取出库单数据集合 , 对DataRow集合遍历;
2. 对每一出库DataRow对仓库库存表的业务组件提取相同物料编号的数据集合,遍历扣减库存,在事务中持久化一次 ;
3. 继续遍历下一个出库DataRow对象,对仓库库存表的业务组件提取相同物料编号的数据集合,遍历扣减库存,再在事务中持久化一次
4. 直到DataRow集合遍历完成,提交事务;
这样对数据库的往返次数是不是太频繁了吗,这是不是一个可以接受的好的解决方案?有没有更好的解决方案
5. 如果说有,用sql server存储进程,就可以很好解决这个问题,但如果不用存储过程呢?
------------------
单号 行号 物料编号 入库数量 生产订单
IN986 1 A 100 PO97
IN986 2 B 200 PO97
IN986 3 A 400 PO86
IN986 4 B 600 PO86
-------------------
仓库库存表
物料编号 批号 库存量
A LOT91 80
A LOT96 600
B LOT75 150
B LOT82 900
------------------
如果不用存储过程,直接用.net业务处理层去做出库记帐,最佳效率的方案是怎样的?
------------------
我见过这样的.net方案:
1. 在一个出库单的业务组件 提取出库单数据集合 , 对DataRow集合遍历;
2. 对每一出库DataRow对仓库库存表的业务组件提取相同物料编号的数据集合,遍历扣减库存,在事务中持久化一次 ;
3. 继续遍历下一个出库DataRow对象,对仓库库存表的业务组件提取相同物料编号的数据集合,遍历扣减库存,再在事务中持久化一次
4. 直到DataRow集合遍历完成,提交事务;
这样对数据库的往返次数是不是太频繁了吗,这是不是一个可以接受的好的解决方案?有没有更好的解决方案
5. 如果说有,用sql server存储进程,就可以很好解决这个问题,但如果不用存储过程呢?
------------------
2. 但很多高手都建议用业务规则层去处理业务逻辑,此程序健壮性来说是好的;
3. 如果用存储过程去做,整个应用程序维护性会差一些;
4. 另外,我个人判断用业务逻辑组件去组织构造非常健壮 ,因为我们会用很多的低层组件的成熟的方法组合,抽象业务操作转化为对象,方法建立业务规则组件非常好;
5. 但就是在用这些低层组件方法的代价是有的,如数据库查询的往返行程会增多;
6. 即获得了程序的健壮,却失去了性能,真是不好,强烈高手继续指点一下 !!,关注的网友请顶一下
http://www.68asp.com/Article/CJ/200409/845.html
关于数据访问层设计框架设计其中的一个业务逻辑组件算法:public void StoreIntoWarehouse(EntityData IndepotForm)
{
DataTable tbl=IndepotForm.Tables["InDepotFormDetail"];
try
{
ProductEntityDAO ped=new ProductEntityDAO();
for(int i=0;i<tbl.Rows.Count;i++)
{
DataRow formdetail=tbl.Rows[i];
string productID=formdetail["ProductID"].ToString();
decimal
inCount=(decimal)formdetail["InCount"];
EntityData product=ped.FindByPrimaryKey(productID);
DataRow productRow=product.GetRecord("Product");
productRow["CurrentCount"]=(decimal)productRow["CurrentCount"]+inCount;
ped.UpdateEntity(product);
}
ped.Dispose();
InDepotFormEntityDAO inDepotForm=new
InDepotFormEntityDAO();
inDepotForm.InsertEntity(IndepotForm);
IndepotForm.Dispose();
ContextUtil.SetComplete();
}
catch(Exception ee)
{
ContextUtil.SetAbort();
throw ee;
}
}