EF CodeFirst如何知道为哪个模型类创建表格?

5
我在网上找不到答案,请告诉我如果我忽略了任何资源,请提供链接。
我理解 Entity Framework 的 CodeFirst 工作方式。问题是:EF 如何知道为哪个模型类创建表格,以及哪个模型类只是作为一个类处理?
例如,在使用 VS 2012 Express Developer 创建新的 MVC 项目时生成的示例 MVC4 应用程序中,Account Model 中有一些类(LocalPasswordModel、LoginModel、RegisterModel 等)没有表格,EF 知道不要为这些类生成表格。
EF 是如何知道这一点的?
1个回答

7

Entity Framework会查看您的DbContext类,并为您定义的每个DbSet<T>属性创建一张表。

EF甚至不会看到未被DbContext引用的任何类。


感谢您如此快速的回应。我是新手,请原谅我的问题可能有些愚蠢。您所提到的是指“幕后操作”吗?我知道我们可以扩展DBContext类,并使用我们自定义的模型类来做您所说的事情,但是我没有从AccountModels.cs中可见的代码中看到LoginModel或RegisterModel如何避免与EF一起创建表格(这是针对MVC4应用程序的)。 - 9999bao
1
@9999bao:EF并不会查看你的所有类,它只会查看DbContext中的DbSet。由于DbContext没有引用那些类,EF甚至都看不到它们。 - SLaks
@slaks 这个规则的例外是被导航属性引用的实体类型,即使在上下文中没有列出,它们也会被转换为SQL中的表。 - undefined
1
规则的第二个例外是,您可以使用Fluent API定义实体:modelBuilder.Entity<Order>(); 实际上,您根本不需要任何DbSet<T>属性来定义实体模型。只要T是通过DbSet<T>属性或使用Fluent API明确定义的已知实体,或者可以通过导航属性访问,就可以始终引用集合context.Set<T>(),这与公开DbSet<T>属性相同。 - Slauma

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