使用EF Code First生成数据库时,例如在DbContext
类中声明数据库集。
public DbSet< ProductOption > ProductOptions { get; set; }
现在从我一直在做的阅读中,如果你有ProductOptions
类型的相关实体,你不需要声明它,因为EF将查看依赖项并使用它们来创建所需的数据库表。
我的问题是:这是推荐的做法吗?如果是这样,那么如何访问代码中的相关类型,因为它不作为数据集存在。
这也是EF的自动发现功能,它是否在两个方向上都这样做,即如果你声明一个内部没有任何相关实体的数据库集,但它是某个其他实体中的实体,将EF找到了吗?
欢迎任何澄清。感谢
修改
我所说的无法访问自动发现的类型的示例是您的播种数据。
答案 0 :(得分:0)
您实际上可以访问这些类型,而无需在上下文类中声明DbSets。在Seed方法下的上下文初始化类中,您可以使用yourContext.Set()访问任何实体。添加(theObject)。这样,您不需要在上下文类中包含DBSet属性。我不确定您使用的是哪个版本的EF,或者您是否正在使用初始化类来播种数据。无论如何,你仍然可以使用.Set()。Add来播种数据。
关于问题,EF将找到非相关实体。就像你说的,只要一个对象是一个实体的属性,EF就应该为它创建一个表。只要在代码中首先声明任何实体的映射,它就应该创建它以及任何可能有也可能没有映射的子实体。我必须看看你是如何声明你的背景和映射确定的。