Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.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

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# 使用实体框架时在何处指定业务规则_C#_Entity Framework_C# 4.0 - Fatal编程技术网

C# 使用实体框架时在何处指定业务规则

C# 使用实体框架时在何处指定业务规则,c#,entity-framework,c#-4.0,C#,Entity Framework,C# 4.0,我在这里有点不知所措 我在项目和任务之间以及任务和TaskEvent之间存在一对多关系 任务仅存在于项目上下文中,一旦分配给项目,就不能更改为属于另一个项目 业务规则规定,如果某个任务没有针对其捕获的TaskEvents,则只能删除该任务,并因此从属于某个项目的任务集合中删除该任务 如何在实体框架中指定它?我使用的是自跟踪实体,但实际上我不知道在哪里定义这种规则。我们还有其他不知道db的规则,但是如何将业务规则(最好是在实体类重新生成时与实体类隔离存在的业务规则)定义为一个单独负责的类 我想我必

我在这里有点不知所措

我在项目和任务之间以及任务和TaskEvent之间存在一对多关系

任务仅存在于项目上下文中,一旦分配给项目,就不能更改为属于另一个项目

业务规则规定,如果某个任务没有针对其捕获的TaskEvents,则只能删除该任务,并因此从属于某个项目的任务集合中删除该任务

如何在实体框架中指定它?我使用的是自跟踪实体,但实际上我不知道在哪里定义这种规则。我们还有其他不知道db的规则,但是如何将业务规则(最好是在实体类重新生成时与实体类隔离存在的业务规则)定义为一个单独负责的类

我想我必须实现某种验证器,它可以使用反射来根据被验证对象的类型提取这些“规则”类,然后让它们各自执行验证

但是我如何将对象上下文推到其中呢?我的验证器是否应该有一个对象上下文的实例,然后在执行时将其传递给每个规则

更令人慌乱的是,我如何检测删除?我是否需要调用项目的旧版本,并将其旧任务与当前任务进行比较,然后检查所有已删除的任务,以确保它们没有捕获TimeEvents

这种方法的缺点是什么?你还有什么建议

编辑:我应该指定我们使用的是n层设计,客户端应用程序(MVC和Silverlight)都会点击WCF服务来做任何有用的事情。这显然是我们想要在其中实现验证的层,尽管如果我们可以在客户机上使用那些不特定于db的规则,那就太好了。目前,我们正在使用DataAnnotation进行这些验证

谢谢

看一看


由于您使用的是n层设计,我的建议是将EF用作ORM层,而不是域模型的完全替代品。您应该创建一个包含业务规则的单独BLL层,并将域模型映射到EF类。如果映射不复杂,则可以手动完成,否则您可以使用诸如之类的工具为您执行映射。

我们最终使用了一个服务层,该层根据规则上下文封装了规则和已验证的实体

对于每个操作,都有一个上下文和一组通过使用属性关联的规则。因此,所有关联规则都可以针对服务操作所需的特定类型的实体

这些规则是使用反射识别的,并在服务调用中进行测试

实体框架实体作为一个比我希望的稍微薄一点的域模型,但我们从未遇到严重的问题,EF提供的跟踪实际上帮助简化了一些以前不可能的规则