创建内实体框架编码迁移全文索引(Create fulltext index within Entit

2019-09-03 03:47发布

TLDR; 你如何使用实体框架5编码migration增加全文索引

我有一个添加全文索引使用实体框架迁移数据库的问题。 它需要所以我试图修改自动生成将其添加到InitialCreate迁移从一开始就在那里。

至于有没有办法通过DbMigrations API,我使出的“向上”的代码运行结束内联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和手动运行它,它工作正常。 我也diff'd生成的sql有和没有交易外运行它,它们是相同的,所以必须要执行什么的方式SQL。

在此先感谢您的帮助!

Answer 1:

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

我能得到它在某些情况下使用SQL()调用,而不是CREATETABLE(),并通过合并创建全文目录和创建全文索引的语句到一个SQL()调用工作。 然而,这并不十分可靠。 有时它会工作,有时会失败,同样的超时错误。

唯一可靠的解决方案,我发现是目录和全文索引的创建移到一个单独的迁移。



文章来源: Create fulltext index within Entity Framework Coded Migrations