Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 长任务实体框架与webapi_C#_Entity Framework_Extjs_Asp.net Web Api_Entity Framework 5 - Fatal编程技术网

C# 长任务实体框架与webapi

C# 长任务实体框架与webapi,c#,entity-framework,extjs,asp.net-web-api,entity-framework-5,C#,Entity Framework,Extjs,Asp.net Web Api,Entity Framework 5,我正在使用web api和EF 6构建一个时间和出勤模块,该模块将加载一个外部时间表文件,然后将处理许多规则以验证员工的实际工作时间 作为我的客户端,我使用EXTJS。将在时间表导入网格上显示加载图标,以便用户可以在任务运行时在应用程序上执行其他操作 因为我真的不知道这个任务需要多少时间,可能需要2到5分钟,所以我正在考虑触发一个windows服务来执行这个可能很长的进程任务。因此,当用户上传时间表文件时,我将更新表中的bool标志,该标志表示任务正在进行中。之后,windows服务将读取该信息

我正在使用web api和EF 6构建一个时间和出勤模块,该模块将加载一个外部时间表文件,然后将处理许多规则以验证员工的实际工作时间

作为我的客户端,我使用EXTJS。将在时间表导入网格上显示加载图标,以便用户可以在任务运行时在应用程序上执行其他操作

因为我真的不知道这个任务需要多少时间,可能需要2到5分钟,所以我正在考虑触发一个windows服务来执行这个可能很长的进程任务。因此,当用户上传时间表文件时,我将更新表中的bool标志,该标志表示任务正在进行中。之后,windows服务将读取该信息并开始执行所有作业。任务完成时,windows服务将把标志更新为任务完成

第一个问题:上述方法正确吗? 现在,我关心的是如何在我的任务作业windows服务上执行业务规则,我需要做的是将所有时间表文件记录加载到临时表上,然后让我的所有员工逐个循环。在每个循环中,我必须查看时间表记录是否有属于该员工的任何时间戳,然后转到许多规则,如:

检查员工轮班是否与考勤表记录的出入境时间相符,如果不相符,则处以工作时间罚款 检查员工是否休假,如果在时间单上找到记录,不要考虑。 检查员工在一段时间内迟到的次数,如果新的时间表记录有新的迟到,则应用半天或全天罚款 如果迟到或缺席,检查员工是否有授权的日间许可证。如果是这样,不要施加任何处罚。 还有许多其他规则。。。。 大约有1500名员工

第二个问题:使用EF进行循环可以吗?还是有更好的方法来逐个检查并应用规则?
如果是长时间运行的任务,则需要将其卸载到服务。默认IIS将仅等待90秒,然后超时。从控制器得到的响应将是超时。我们使用WCF和MSMQ来创建服务,效果非常好。如果您希望在完成后立即更新,您可以检查Signal之类的框架。我可以使用Signal更新我的客户端extjs,以便用户知道实际运行任务的状态或步骤吗?是的,我将使用MSMQ调用一个控制台应用程序来完成长时间运行的任务。我从未使用过extjs。从javascript调用SignalR非常简单,web上有很多信息。我将看一下。谢谢。您认为使用EF逐个循环员工的方法听起来合理吗?我将在实体上实现IValidatableObject接口,EF将在SaveChanges上自动调用该接口。但如果一个实体失败,则没有一个实体被过账。通常情况下,您不会将所有逻辑放入validate方法中,该方法将调用其他对象来执行业务逻辑。