Visual Studio 搭建新表并保留现有表?

zd287kbt  于 2022-12-04  发布在  其他
关注(0)|答案(4)|浏览(158)

我已经在一个C#项目中搭建了一些表。现在我需要搭建一个新的表。我不想重新搭建现有的表,因为有一些变化。

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

该命令将获得以下错误。
目录C:\Users....\Models中已存在以下文件:myContext.cs、newTable.cs。请使用Force旗标来覆写这些档案。
使用-Force将覆盖现有表的现有代码。

vmpqdwk3

vmpqdwk31#

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

y1aodyip

y1aodyip2#

它将帮助您更改现有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()。

20jt8wwn

20jt8wwn3#

我通常会保留一个小文本文件来构建这个搭建命令,并向其中添加每个表。
每次我执行它,所有的模型都被覆盖。
如果您在搭建之后在这些模型中编写了任何逻辑,我建议您在模型中的字段之上编写一个 Package 器类,一个从这个模型扩展并实现了附加方法的类。这样您的逻辑就不会被覆盖,并且只要模型名称保持不变,模型 Package 器就会继续从它扩展。
我只是相对新的脚手架和我希望会有一个更好的方法在2022年!

4smxwvx5

4smxwvx54#

多年过去了,但直到今天,scaffolding仍然不支持在新的表/视图上创建类和只更新dbcontext。我的解决方法是将现有的类复制到另一个目录,然后删除model目录中的所有类,使用--no-build运行scaffolding,并将复制的类(dbcontext除外)复制回model目录。
它很笨重,但至少完成了这项工作。
也许可以把这个功能放在下一个EF版本的愿望清单上。

相关问题