C# NET核心实体框架如何从模型创建表

C# NET核心实体框架如何从模型创建表,c#,entity-framework,.net-core,C#,Entity Framework,.net Core,我是.NET Core新手,我正在探索这本教程: 现在看来,entityframework采用了代码优先的方法从创建的模型生成数据库表,本教程在通过packagemanager控制台生成表之前使用这个脚手架来创建视图和控制器 我的问题是:我想知道解决方案如何真正知道哪些模型将被推送到更新数据库上的数据库中?我已经手动将一些独立的模型dbset添加到DBContext(在教程MvcMovieContext中),但这似乎不起作用。是Migrations文件夹吗?它是如何工作的 我认为这个脚手架步骤是

我是
.NET Core
新手,我正在探索这本教程:

现在看来,
entityframework
采用了代码优先的方法从创建的模型生成数据库表,本教程在通过packagemanager控制台生成表之前使用这个脚手架来创建视图和控制器

我的问题是:我想知道解决方案如何真正知道哪些模型将被推送到
更新数据库上的数据库中?我已经手动将一些独立的模型
dbset
添加到
DBContext
(在教程MvcMovieContext中),但这似乎不起作用。是
Migrations
文件夹吗?它是如何工作的


我认为这个脚手架步骤是没有必要的(特别是如果我想维护没有任何UI界面的表),并且它在某个地方有某种列表,说明哪个模型对象进入数据库或不进入数据库。

您必须创建迁移并更新数据库。您可以在这里找到命令 实体框架(Core)的工作原理如下:通过创建
DbContext
或从中派生的任何类,EF Core检查
DbSet
s及其在代码中的相关类。以这个
DbContext
为例:

public class StackOverflowDbContext : DbContext {
    public DbSet<MyClass> Test { get; set; }
}
公共类StackOverflowDbContext:DbContext{
公共数据库集测试{get;set;}
}
一旦开始初始迁移(例如可以通过
dotnet ef migrations add initial
完成),ef就会检查
DbContext
类。如果有多个,则需要指定该值,否则将获取第一个可用值并对其进行分析。在这种情况下,需要将
MyClass
添加到数据库中,因此该类及其所有属性开始出现在初始迁移中

从那里,您可以随时更新您的模型,但不要忘记在这之后创建一个新的迁移

我认为这个脚手架步骤是没有必要的


是的,这是真的。你不需要使用脚手架,它只是提供了一个起点。

谢谢你的解释!另一个问题:如果每次更改模型时都必须不断添加新的迁移,这不会导致解决方案最终因迁移文件而变得非常臃肿吗?我可以在以下时间将其恢复到干净状态:1。清除EFMigrationsHistory表。2.清除迁移文件。3.添加另一个迁移来整合DbContext中的所有内容?理论上它可能会膨胀。但是,这不应该是一个问题,因为迁移文件保存在一个额外的文件夹中,不应该触碰它。即使不建议您这样做,除非您是数据库服务器和程序的所有者,您当然可以清除历史记录表,删除所有迁移,然后创建一个新的“初始”迁移。您可能只是忘记了运行迁移。EF不直接从数据库集创建表。您需要在创建迁移文件的DbContext上运行迁移。EF然后在此基础上构建表