【问题标题】:Scaffold new tables and keep the existed ones?搭建新桌子并保留现有桌子?
【发布时间】:2017-06-27 20:54:49
【问题描述】:
我在一个 C# 项目中搭建了几个表。现在我需要搭建一个新表。我不想重新搭建现有的脚手架,因为有一些变化。
Scaffold-DbContext "Server=...;Database=...;...;" Microsoft.EntityFrameworkCore.SqlServer `
-OutputDir Models -Tables newTable
该命令将得到以下错误。
目录 C:\Users....\Models 中已存在以下文件:myContext.cs,newTable.cs。使用 Force 标志覆盖这些文件。
使用-Force 将覆盖现有表的现有代码。
【问题讨论】:
标签:
c#
visual-studio
entity-framework
【解决方案1】:
我希望有一种内置方式来添加实体和更新现有上下文,但似乎没有。我通过在包管理器控制台中使用--context 选项克服了这个问题,并给它起了一个临时名称,例如--context TempContext。这有效并生成了新表和临时上下文。然后我只是将public virtual DbSet<NewEntityType> NewEntityType { get; set; } 属性和modelBuilder.Entity<NewEntityType>(entity => 块从临时上下文中的OnModelCreating 方法复制到我现有的。之后,我删除了临时上下文。这很简单。
【解决方案2】:
它将帮助您更改现有的 DbContext 文件。
如果您创建了一个新表,则新类(实体)将在您的模型文件夹中创建,如果您删除现有表,则它将删除模型文件夹中的类(实体)。
对于包管理器控制台
BloggingContext 是我自己的数据库上下文文件,你必须改变
你的名字。
在包管理器控制台中使用命令
Scaffold-DbContext "Server=SERVER_NAME; Database=DATABASE_NAME; User Id=USER_ID; Password=PASWWORD;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -context "BloggingContext" -Force
将打开一个对话框。选择适当的选项。
我选择“同意”
并从 BloggingContext.cs 文件中删除 OnConfiguring()。