我第一次使用Entity Framework,我需要在将新对象插入db之前添加业务逻辑,这里是我想到的选项:
在Entity Framework上管理业务逻辑时,哪种方法是最佳实践
答案 0 :(得分:7)
查看validation with EF - 验证在实体本身内。
这是组织项目的一种非常干净的方式。
当你有POCO时,实体验证的显而易见的地方就在POCO本身。
有意义的是,Customer对象的任何验证实际上都在Customer类中。
答案 1 :(得分:5)
我的经历:
Validate
方法,该方法将检查整个权利的状态是否正确。 但只有当你总是使用整个实体时,这一切才有效。一旦开始使用部分更新和其他功能,您仍然需要在其他地方处理验证。这是另一个+1按需验证。
答案 2 :(得分:1)
我更喜欢3号版本。我喜欢抽象实体框架using a repository或类似的东西,以防我希望/将来需要替换EF。
然后,对于验证/业务逻辑,我使用对应用程序有意义的任何验证技术,但通常是DataAnnotations(用于UI最小验证)和验证框架(如Fluent Validation)的某种组合,以实现最大验证/商业规则。此验证/业务逻辑同时存在于实体类(DataAnnotations)和抽象层中,抽象层通常是我的应用程序中的服务层。
答案 3 :(得分:0)
答案 4 :(得分:0)
另一种考虑方法是完全从业务逻辑层完全组装数据访问层。
创建一个只能直接访问Entity Framework的数据访问接口,然后在一个单独的项目中,我将创建通过接口与数据访问层连接的业务逻辑类。您的业务逻辑项目中没有实体框架引用。
通过这种方式,这些图层可以组件化,并且更容易作为多个程序集分发,以进行双层或三层访问。
答案 5 :(得分:0)
可能会尝试阅读Specification pattern
答案 6 :(得分:0)
您可以通过创建另一个部分类定义来扩展您的类,大多数EF模板将实体定义为部分定义,仅供人们轻松扩展它们。如果你正在使用WPF或Silverlight,你会想要这样做,因为大多数东西都没有直接绑定,你要么有一个布尔值,要把它转换为颜色等等。编写转换器很慢,需要更多代码然后设置只需在BusinessObjects上创建新的Getter。
我们现在已经使用EF 4.0 STE(自我跟踪实体)一段时间了,我们使用自己的部分定义扩展了大部分。我们更改了一些创建STE的T4模板,以允许访问自定义部分类定义和其他小改进的构造函数。
答案 7 :(得分:0)
来自Visual Studio Magazine的文章解决了这个问题: