在Entity Framework Code First中声明DBSet<Type>在DBcontext中

3
使用EF Code First生成数据库时,您需要在DbContext类中声明DB集合,例如:
public DbSet< ProductOption > ProductOptions { get; set; }

现在根据我所阅读的内容,如果您在类型ProductOptions中有一个相关实体,您不需要声明它,因为EF将查看依赖项并使用它们来创建所需的DB表。

我的问题是:这是推荐做法吗?如果是,那么如何在代码中访问相关类型,因为它不存在于数据集中。
另外,EF的自动发现功能是否在两个方向上都执行,即如果您声明了一个没有任何相关实体的db set,但它是某个实体中的实体,EF是否会找到它?
欢迎任何澄清。谢谢 编辑 我所说的无法访问自动发现的类型的示例是当您填充数据时。
1个回答

0

实际上,在不在您的上下文类中声明DbSets的情况下,您确实可以访问类型。在种子方法下的上下文初始化类中,您可以使用yourContext.Set().Add(theObject)访问任何实体。这样,您就不需要在上下文类中拥有DBSet属性。我不确定您正在使用哪个版本的EF或者是否正在使用初始化类来填充数据。无论如何,您仍然可以使用.Set().Add来填充数据。

关于问题,EF是否会找到非相关实体。像您所说的那样,只要一个对象是实体的属性,EF就应该为其创建一个表。只要在代码优先中为任何实体声明映射,它就应该创建它以及可能具有自己的映射的任何子实体。我必须看看您如何声明上下文和映射才能确定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接