EF Core DB first - 我需要索引定义吗?

Posted

技术标签:

【中文标题】EF Core DB first - 我需要索引定义吗?【英文标题】:EF Core DB first - Do I need the index definitions? 【发布时间】:2021-12-31 11:01:08 【问题描述】:

我正在使用 EF Core(如果重要,则为 3.1)和 DB 优先方法。 前段时间我使用 Scaffold-DbContext 命令生成了模型,在生成的上下文文件中有很多索引定义,例如: entity.HasIndex(e => new e.ItemType, e.ItemID );

由于我们最近进行了一些索引更新,我想知道 - 我真的需要更新模型中所有相关的索引定义吗?我什至需要它们吗?它们是否对 EF 的性能或代码的运行方式有任何影响,还是我可以删除它们而不担心在实际数据库中进行的任何更新?

提前致谢

【问题讨论】:

你可以忽略它们。它们不在运行时使用。 你确定@ErikEJ 吗? EF是否有可能根据是否对某些内容进行索引来创建不同的搜索(我认为如果以这种方式指定索引,则查找COLA,COLB的搜索会将搜索更改为COLB,COLA)。 是的,我很确定 @dorBS 你的意思是你已经直接在你的数据库表中创建了一些索引并且你担心你的 dbcontext 和数据库之间的差异吗? @M.Mohabbati 完全正确 【参考方案1】:

Database-First方法中,与Code-First不同的是,现有的数据库有自己的配置,将来可能会发生变化。

我的意思是,您总是根据数据库对象和数据库中所做的更改来更新您的模型。

在你的情况下,我建议你在 Visual Studio 中使用 Database Project 为你的数据库使用 Source Control 来控制它。以下文章可能对您有所帮助:

Create Your First Visual Studio Database Project

在我看来,将数据库更改保留在同一个应用程序项目中并不重要。将所有数据库对象保存在另一个数据库项目中,并且仅将数据库模型用于您的应用程序模型。您可以构建它,然后在 SQL Server 上部署数据库项目。


索引不直接影响 EF 功能,但数据库性能会影响其输出。 “索引是与表或视图相关联的磁盘结构,可加快从表或视图中检索行的速度。”

Clustered and nonclustered indexes described

【讨论】:

以上是关于EF Core DB first - 我需要索引定义吗?的主要内容,如果未能解决你的问题,请参考以下文章

EF Core中的DB First与Code First

要在 EF Core 中添加没有外键的导航属性,使用 .NET Core Web API 进行 DB-first 迁移

EF Core 2.0使用MsSql/Mysql实现DB First和Code First

如何在 EF Core Code First 中自定义迁移生成?

EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型

DB First,ASP Net Core 2.1,EF6:InvalidOperationException:在应用程序配置文件中找不到名为“DataContext”的连接字符串