gpt4 book ai didi

entity-framework-5 - 在 Entity Framework 编码迁移中创建全文索引

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

TLDR;如何使用 Entity Framework 5 编码迁移添加全文索引

我在使用 Entity Framework 迁移向数据库添加全文索引时遇到问题。它需要从一开始就存在,所以我正在尝试修改自动生成的 InitialCreate 迁移以添加它。

由于没有办法通过 DbMigrations API 做到这一点,我不得不在“Up”代码的末尾运行内联 sql。

Sql("create fulltext catalog AppNameCatalog;");
Sql("create fulltext index on Document (Data type column Extension) key index [PK_dbo.Document] on AppNameCatalog;");

当它运行时,一切都被创建得很好,直到它到达这个 sql,然后它会抛出 sql 错误“CREATE FULLTEXT CATALOG 语句不能在用户事务中使用。”。这是预期的并按设计工作。

幸运的是 Sql() 有一个重载,允许您在迁移事务之外运行 sql。太棒了!我想。
Sql("create fulltext catalog AppNameCatalog;", true);
Sql("create fulltext index on Document (Data type column Extension) key index [PK_dbo.Document] on AppNameCatalog;", true);

但是,请注意修改代码以执行此操作(见上文)会导致新的超时错误“超时已过期”。操作完成之前超时时间已过或服务器没有响应。

我试过吐出 sql 并手动运行它,它工作正常。我还比较了生成的 sql 是否在事务外运行它,它们是相同的,所以它必须是 sql 的执行方式。

在此先感谢您的帮助!

最佳答案

我有一个类似的问题。我的 InitialCreate 迁移正在创建一个表,然后尝试向该表添加全文索引,使用重载的 Sql() 指示它需要在事务之外执行。我也收到超时错误,我怀疑这是由于线程死锁造成的。

通过使用 Sql() 调用而不是 CreateTable() 并将 CREATE FULL TEXT CATALOG 和 CREATE FULL TEXT INDEX 语句合并到单个 Sql() 调用中,我可以让它在某些情况下工作。然而,这不是很可靠。有时它会起作用,有时它会因相同的超时错误而失败。

我找到的唯一可靠的解决方案是将目录和全文索引的创建移动到单独的迁移中。

关于entity-framework-5 - 在 Entity Framework 编码迁移中创建全文索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16546326/

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