![](/img/trans.png)
[英]InsertOnSubmit equivalent in DbContext.DbSet using Entity Framework 4 code first
[英]Declaring DBSet<Type> within DBcontext - Entity Framework Code First
使用EF Code First生成数据库时,例如在DbContext
类中声明数据库集。
public DbSet< ProductOption > ProductOptions { get; set; }
现在从我一直在做的阅读中,如果你在ProductOptions
类型中有一个相关的实体,你不需要声明它,因为EF将查看依赖项并使用它们来创建所需的数据库表。
我的问题是:这是推荐做法吗? 如果是这样,那么如何访问代码中的相关类型,因为它不作为数据集存在。
这也是EF的这种自动发现功能,它是否在两个方向上都这样做,即如果你声明一个内部没有任何相关实体的数据库集,但它是某个其他实体中的实体,EF会找到它?
欢迎任何澄清。 谢谢
编辑
我所说的无法访问自动发现的类型的示例是您的播种数据。
实际上,您可以访问类型,而无需在上下文类中声明DbSets。 在Seed方法下的上下文初始化类中,您可以使用yourContext.Set()访问任何实体。添加(theObject)。 这样,您不需要在上下文类中包含DBSet属性。 我不确定您使用的是哪个版本的EF,或者您是否正在使用初始化类来播种数据。 无论如何,你仍然可以使用.Set()。Add来播种数据。
关于这个问题,EF将找到非相关实体。 就像你说的,只要一个对象是一个实体的属性,EF就应该为它创建一个表。 只要在代码中首先声明任何实体的映射,它就应该创建它以及任何可能有也可能没有映射的子实体。 我必须看看你是如何声明你的背景和映射来确定的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.