我可以避免在 EF Core 中使用迁移吗?

Posted

技术标签:

【中文标题】我可以避免在 EF Core 中使用迁移吗?【英文标题】:Can I avoid using migration in EF Core? 【发布时间】:2021-10-08 15:06:30 【问题描述】:

我正在创建一个 ASP.NET Web API 项目,它从 MSSQL 数据库中获取数据。使用 Scaffold 命令后,我拥有所有模型和适当的数据库上下文,并使用 fluentApi 我定义了表之间的一些关系(键设置,一对多关系)。 SQL server里没有这个东西,我不想影响数据库。不使用迁移可以吗? (或者在这种情况下,我们不能将 EF Core 用于数据库优先方法?)

【问题讨论】:

只要您不执行架构迁移,EF 就不会触及您的数据库架构。我猜想使用 EF 的 CRUD 语句仍然可以工作,但是如果不在数据库上定义外键,您可能会遇到不一致。 我也不确定,可能不会有问题。顺便说一句,应用程序只读取数据,而不是创建、更新或删除 【参考方案1】:

您不必将迁移与数据库优先方法一起使用。 在这种情况下,您将不得不手动更新您的模型,并且可能在每次更改数据库时更新您的 DbContext(要读取的新表,新列...)。 至于关系和键集,我建议创建具有额外信息的 Dto 类,如果可能,如果属性相同,您可以使用继承。 我已经使用了这种方法,并且只有当数据库包含很多具有很多列的表时,我才会推荐它。与这种情况相反,我创建了一个 web api,用于使用 ef 核心和数据库优先方法插入和更新数据,而无需任何迁移。虽然有第二个应用程序使用存储过程读取相同的数据库。使用这种方法有时会出现写入、更新和删除的并发问题,例如当您在 Mssql 中手动运行查询并尝试通过 api 写入同一个表时,但您可能不会只遇到这个问题读取。

【讨论】:

我已经使用 fluentApi 创建了一些关系,有什么方法可以测试它们是否正常?除了迁移@terodaktil 那时我没有使用 FluentApi,我在数据库中有关系。但只要在 DbContext 中定义了关系,它们仍然应该适用。您可能只需使用该应用程序即可对其进行测试。只需强制系统进入某个约束需要抛出异常的情况,这就是我测试数据库约束的方式。测试是否应用其中任何一个的最佳方法是添加唯一约束并尝试插入重复项。

以上是关于我可以避免在 EF Core 中使用迁移吗?的主要内容,如果未能解决你的问题,请参考以下文章

在单元测试期间避免在EF Core 2.2中使用HasData Seed DbContext

如何避免在 EF Core 中插入后选择插入的实体?

我可以使用 EF Core 5 InMemory 数据库进行集成测试吗

如何避免使用自动代码优先迁移重新创建现有数据库

用上这几种.NET EF Core性能调优,查询性能飙升

在 ASP.NET Core Web API 中使用 Linq 避免实体重复