在Entity Framework Coded Migrations中创建全文索引

Tom*_*ley 13 full-text-indexing ef-migrations entity-framework-5

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

我在使用Entity框架迁移向数据库添加全文索引时遇到问题.它需要从一开始就在那里,所以我正在尝试修改自动生成的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;");
Run Code Online (Sandbox Code Playgroud)

当这个运行时,一切都被创建好,直到它到达这个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);
Run Code Online (Sandbox Code Playgroud)

但是低并且看到修改代码来执行此操作(参见上文)会导致新的超时错误' 超时已到期.操作完成之前经过的超时时间或服务器没有响应."

我已经尝试吐出sql并手动运行它,它工作正常.我也在生成的sql中使用和不在事务外运行它们并且它们是相同的,因此它必须是sql执行方式.

在此先感谢您的帮助!

jsp*_*aey 7

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

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

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