有什么方法可以在 SQL 服务器中创建一个 table,然后将迁移更新到我的项目?

Is there any way i can just create a table in SQL Server and then update the migration to my project?

我已从 MS SQL Server 2012 导入数据库 tables,并使用 this 示例中所示的代码优先概念将它们迁移到 Visual Studio 2015。它正在工作,但刚才我刚刚在 SQL 服务器中添加了一个新的 table,我想用新的 table 更新我项目中的 DBContext。

我尝试在程序包管理器控制台中输入 "add-migration new_table_name",但没有成功。我知道我必须在我的项目的模型文件夹中手动编写一个新模型,然后只有该迁移才能工作。但我觉得我更愿意 table 在 SQL 服务器中创建一个 table。那么,有什么方法可以让我在 SQL 服务器中创建一个 table,然后将迁移更新到我的项目?

如果我创建另一个 ado.net 可以吗,但是这次我先选择 DB?之后,我将首先删除代码 DBContext、configuration.vb 和模型。它会影响我以后的项目吗?

据我所知,

EF 迁移应该服务于 Code-First 方法,而您想首先使用数据库,这意味着迁移不适合您。

您可以通过数据注释属性和 EF fluent API 通过重写 DbContext 子类中的 OnModelCreating 方法实现大多数数据库原理图功能并自定义表及其列属性。

如果您的主要目标是先在数据库中创建表,然后自动更新您的项目,那么您应该使用数据库优先。

也就是说,您必须首先考虑数据库的缺点:根据我个人的经验,我停止使用该方法主要是因为两个原因:

  • 据我所知,数据库优先支持将停止。 EF Core 不包含编辑器工具。关于此的一些链接:a post from Julie Lerman, the EF Core roadmap, and an early announcement from Microsoft.
  • 模型编辑器有几个错误和怪癖,导致代码不时被破坏。这些错误很可能只是不会被修复(见上一点)。更改现有字段的类型、更改外键等
  • 由于 auto-generated 实体文件的源代码存储库合并,我遇到了很多问题。特别是(但不仅限于)当几个人使用相同的实体时,我们在 auto-generated 代码中遇到合并冲突。此外,auto-generated 代码有时未被正确 checked-out,因此它在 edmx 中得到了 out-of-sync。我不确定这是否也发生在其他人身上,但似乎有时 Visual Studio、编辑器、后台 auto-code 生成工具和 TFS 源代码管理器不能很好地协同工作。

因此,如果您真的不能不首先创建数据库中的表,请继续使用数据库优先,但是您必须考虑如果不使用代码优先,您将失去什么。这种方法被广泛推荐是有原因的。

现在人们使用数据库优先的主要原因通常是无法将遗留代码迁移到代码优先方法。据我所知,人们普遍认为 Code First 是另一种选择的正确方法。这里有 an interesting post about this(即使它有点旧,是为 EF 4.1 编写的,当引入 Code First 时,它处理了每种方法的主要优缺点)。

您的解决方法可能是继续使用 Code First,但也可以使用可用的工具,通过从数据库表进行逆向工程来自动生成您的 Code First 实体。有了它,您仍然可以直接在数据库中生成表,但继续使用 Code First 进行迁移和所有操作。这里有 a post from Julie Lerman about some of those tools。可能有比较新的工具,但我没用过,不知道。

注意:我个人对 Database First 的体验有点糟糕,而且没有持续太久。也许对这种方法有更多积极经验的人可以提供更多有用的见解。我一直在使用 Code First 一段时间,并且非常喜欢这种方法。我的回答可能有点偏颇。