gpt4 book ai didi

entity-framework - 如何阻止EF Core索引所有外键

转载 作者:行者123 更新时间:2023-12-03 13:37:54 25 4
gpt4 key购买 nike

Entity Framework Indexing ALL foreign key columns之类的问题所述,EF Core似乎会自动为每个外键生成一个索引。对我来说,这是一个默认的声音(这里不要进入舆论战……),但是在某些情况下,这只是浪费空间并减慢了插入和更新的速度。如何逐案预防?

我不想完全关闭它,因为它弊大于利;我不想为我想要的所有那些索引手动配置它。我只想在特定FK上阻止它。

相关侧面问题:EF文档中的任何地方都提到了自动创建这些索引的事实吗?我在任何地方都找不到它,这可能就是为什么我找不到如何禁用它的原因?

有人会质疑我为什么要这样做...因此,为了节省时间,链接问题的OPer在评论中给出了一个很好的例子:

We have a People table and an Addresses table, for example. The People.AddressID FK was Indexed by EF but I only ever start from a People row and search for the Addresses record; I never find an Addresses row and then search the People.AddressID column for a matching record.

最佳答案

如果确实需要避免在.Net Core中使用某些外键索引(据我所知(当前)),则有必要删除将在生成的迁移代码文件中设置索引的代码。

另一种方法是结合属性或避免索引创建的扩展方法来实现自定义迁移生成器。您可以在针对EF6的答案中找到更多信息:EF6 preventing not to create Index on Foreign Key。但是我不确定它是否也可以在.Net Core中使用。方法似乎有些不同,这是一个应该有用的MS doc article

但是,我强烈建议您不要这样做! 我反对这样做,因为您必须修改生成的迁移文件,而不是因为没有为FK使用索引。就像您在问题评论中提到的那样,在现实世界中,某些情况下需要这种方法。

对于其他人,他们不确定是否必须避免在FK上使用索引,因此必须修改迁移文件:

在您采用这种方式之前,我建议您使用FK上的索引来实现该应用程序,并检查性能和空间使用情况。因此,我会产生很多测试数据。
如果确实在测试或QA阶段导致性能和空间使用问题,则仍然可以删除迁移文件中的索引。

因为我们已经在这里聊过EnsureCreatedmigrations,以确保完整性和关于确保创建和迁移的更多信息(即使您不需要它:-)):

  • 有关EnsureCreated()的MS文档(如果您进行了一些模型更改,它将不更新数据库-迁移即可完成)
  • 也很有趣(即使对于EF7也是如此)EF7 EnsureCreated vs. Migrate Methods
  • 关于entity-framework - 如何阻止EF Core索引所有外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49432203/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com