脚手架新桌子并保留现有的桌子?

时间:2017-06-27 20:54:50

标签: c# visual-studio entity-framework

我在C#项目中搭建了几张桌子。现在我需要搭建一个新表。我不想重新支持现有的因为有一些变化。

Scaffold-DbContext "Server=...;Database=...;...;" Microsoft.EntityFrameworkCore.SqlServer `
-OutputDir Models -Tables newTable

该命令将出现以下错误。

  

目录C:\ Users .... \ Models中已存在以下文件:myContext.cs,newTable.cs。使用强制标志覆盖这些文件。

使用-Force将覆盖现有表的现有代码。

2 个答案:

答案 0 :(得分:1)

它将帮助您更改现有的DbContext文件。

如果您创建了一个新表,那么New Class(实体)将在您的Models文件夹中创建,如果您删除现有表,那么它将删除Models文件夹中的类(实体)。

对于程序包管理器控制台

  

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()。

答案 1 :(得分:1)

我希望有一种内置的方法来添加实体和更新现有的上下文,但是似乎没有。我通过使用包管理器控制台中的--context选项克服了这个问题,并给了它一个临时名称,例如--context TempContext。这工作并生成了新表和临时上下文。然后,我只是将public virtual DbSet<NewEntityType> NewEntityType { get; set; }属性和modelBuilder.Entity<NewEntityType>(entity =>块从temp上下文中的OnModelCreating方法复制到了现有的。之后,我删除了临时上下文。非常简单。