Database 我们应该在什么时候首先使用带有EF代码的DbSet

Database 我们应该在什么时候首先使用带有EF代码的DbSet,database,entity-framework-4,ef-code-first,Database,Entity Framework 4,Ef Code First,正如标题所说,我们应该在什么时候为实体声明DbSet类型的属性,通用指南 没有通用指南。DbSet的实例是加载和持久化给定类型实体的访问点。如果不公开上下文类型上的属性,仍然可以使用dbContext.Set()动态创建它 公开和不公开属性的唯一区别在于定义模型期间的实体发现。当EF首次使用时,它为定义的实体构建“模型”。实体是通过以下方式发现的: 在DbModelBuilder实例上显式定义的映射 在DbModelBuilder实例中显式注册的配置类型 DbSet上下文类型中定义的属性 已发

正如标题所说,我们应该在什么时候为实体声明DbSet类型的属性,通用指南

没有通用指南。
DbSet
的实例是加载和持久化给定类型实体的访问点。如果不公开上下文类型上的属性,仍然可以使用
dbContext.Set()
动态创建它

公开和不公开属性的唯一区别在于定义模型期间的实体发现。当EF首次使用时,它为定义的实体构建“模型”。实体是通过以下方式发现的:

  • DbModelBuilder
    实例上显式定义的映射
  • DbModelBuilder
    实例中显式注册的配置类型
  • DbSet
    上下文类型中定义的属性
  • 已发现实体引用的类型

因此,如果你不使用
DbSet
属性,你必须用其他方法告诉EF你的实体。

你提到的最后一点让我感到困惑,如果实体可以通过引用发现,那么为什么我们需要将它们放在数据库集中。如果您不使用前两个选项,例如使用约定映射或通过数据注释映射,则始终需要至少告诉EF有关根实体的信息,以便它可以通过引用发现其他实体。