我有一个名为TypeA
的类型,TypeA
中的某个地方有一个TypeB
的属性(除了ID
和String
之外什么都没有)
使用Entity Framework,我创建了DbSet
TypeA
- public DbSet<TypeA>
。
这样就可以很好地创建数据库中的TypeB
列 - 但是,我现在需要为一些数据设定种子。由于原始TypeB
中不存在DbContext
,我无法向其提供数据。
因此我将public DbSet<TypeB>
添加到原始DbContext
,它甚至没有检测到数据库架构中的更改/差异。
所以,这让我感到疑惑,我的问题是,创建一个由关系自动创建的单独DbSet
是否有任何区别?
示例代码
public class TypeA
{
public int id { get; set; }
public string name { get; set; }
public TypeB foo { get; set; }
}
public class TypeB
{
public int ID { get; set; }
public string name { get; set; }
}
答案 0 :(得分:1)
是的,有区别。
在设计方面,DbSet
类的要点是to embody the Repository pattern:
从概念上讲,存储库封装了持久存储在数据存储中的对象集以及对它们执行的操作,从而提供了更加面向对象的持久层视图。存储库还支持在域和数据映射层之间实现清晰分离和单向依赖的目标。
其目的是为给定实体封装CRUD。为了做到这一点,存储库不能仅限于一个表。有时它必须与DB中的对象树一起使用。
在您的情况下,为这两种类型设置DbSet
将为您提供直接访问该实体的存储库。这样,您就可以直接查询TypeB
或直接在数据库中创建/更新TypeB
个实例,而不必始终根据TypeA
查询您的查询。
但其中一些取决于您的关联。如果您对TypeB
的约束要求TypeA
,则无法在没有TypeA
的情况下创建约束。但是,您仍然可以直接查询它们。
您仍然可以在没有TypeB
的情况下创建或更新DbSet<TypeB>
个实例 - 只需将一个实例附加到TypeA
实例,然后对DbSet<TypeA>
进行操作。