繁体   English   中英

工作单元+存储库模式+实体框架4:依赖记录(尚未在单笔交易中保存在数据库中)

[英]Unit of work + repository pattern + entity framework 4 : Dependancy of records which is not yet saved in database in sigle transaction

我正在使用工作单元+通用存储库模式+实体框架4开发MVC4应用程序。

现在,我想基于Excel文件中的某些逻辑在表中插入/更新员工请假记录。

例如

Employeeleave表中的记录

id | 员工编号| DOH |

1 | 233 | 1/1/2010 | 2/1/2010

2 | 233 | 3/1/2010 | 4/1/2010

现在插入记录的逻辑是:1)如果一个记录的DOT与下一个记录的DOH之差小于2周,则我们必须用第二个记录DOT更新第一个记录DOT。 并删除第二条记录2)else更新与表中的记录重叠的记录

现在在一个excel工作表文件中,同一位员工有两条记录

在Excel文件中记录

sr号| 员工编号| DOH |

1 | 233 | 2010年1月20日| 2010/2/15

2 | 233 | 3/20/2010 | 4/21/2010

List<Employeeleave> lstEmp = unitofwork.employeeleaveRepository().get(x=>x.id==empid)

for( var emp in Employeeleave)
{
   // for each record check the diffrence between DOT of this record if avaialble amd DOH of next         record 
   // if valid as per logic then update current and delete next record 


}
 unitofwork.save();  //save all DML at once 

现在按照该示例,当将excel中的第一条记录与数据库记录进行比较时,当事务完成时,它将从表中删除第二条记录; 当将excel中的第二条记录与第二条记录进行比较时,它只会尝试更新第二条记录,但是表中的第二条记录在第一次DML操作中被excel文件中的第一条记录删除。

那么,这种情况下的解决方法是什么?

我需要调用unitofwork.save();吗? 每个循环之后? 在这种情况下,如果处理excel文件中的第二条记录时出现错误怎么办? 我希望所有文件记录都得到处理或什么都没有。

谢谢阿莫

我需要调用unitofwork.save();吗? 每个循环之后?

这是不好的方法,请避免。 对数据库的每次调用都是对资源的贪婪。

通过添加带有对象状态的标志,您可以简单地解决问题。
使用EntityState或创建您自己的状态。

然后在DeleteEntity(Entity entity)方法中设置

entity.State = EntityState.Deleted;

然后在第二种情况下忽略已删除的对象。

最后提交数据,因此EF保存所有更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM