实体框架代码相对于配置的第一个约定应该是另一种方式

时间:2012-04-30 14:40:49

标签: c# .net entity-framework convention-over-configur

为什么MS决定使用约定优于配置。

我处理的是非常大的项目,并非所有项目都以数据为中心。实际上,即使是以数据为中心的项目,我的实体类也有许多需要与持久性无关的自定义功能。

使用当前的MSM方法,我最终不得不将属性应用于非持久性属性而不是相反。难道不应该是代码优先的吗?要使用工作类层次结构并将其转换为持久性兼容,作为“添加'?

据我所知,某些约定非常有用,例如Identity或主键属性和外键的命名。但老实说,如果他们没有类结构,请告诉我有多少开发人员会使用代码优先而不是模型优先?

3 个答案:

答案 0 :(得分:3)

您不需要在类中使用任何依赖于持久性的属性。 EF代码首先使用模型配置来定义映射 - 该配置可以直接在派生的DbContext的OnModelCreating方法中定义,也可以在每个实体和复杂类型的单独配置类中定义。属性只是转换为这些配置的快捷方式。

答案 1 :(得分:2)

如果您正在创建适当的抽象,那么这应该不是IMO的问题。听起来您正在将业务实体和逻辑与数据实体混合在一起。如果您遵循存储库模式并抽象持久性实体,那么您的大多数POCO都应遵循约定。我建议重新评估你的架构,因为它听起来与持久层非常相关。如果您创建一个更松散耦合的体系结构,那么这些约定应该对您有意义。只是我的两分钱,但

答案 2 :(得分:1)

我已经将代码首先应用于预先存在的业务对象,以创建一个持久性无知的架构。在这种情况下应用EF的方法不止一种 - 我同意用属性打扮业务对象并不理想。我们过去做过的是

  1. 定义存储在BLL程序集中的接口 由DAL。上层用于CRUD操作
  2. 在DAL中,使用EntityTypeConfiguration(of T)
  3. 映射业务对象

    它对我们来说效果很好,并且很好地将上层与DAL分离