使用 PetaPoco 创建全文索引

Create a FULLTEXT INDEX with PetaPoco

我正在尝试在我的 sql 数据库中使用 petapoco 创建全文索引。 我的编程语言是C# 这是我尝试执行的一小段代码: 小记:方法this.GetFullTextIndexViewCommand(keyDataField, databaseViewName, formDefinition.FullTextSearch.DataEntity, fields); 比较长,它根据给定的字段生成创建视图的命令。

using (var db = new PetaPoco.Database(this.connectionStringName))
     {
        var keyDataField = formDefinition.Fields.Single(f => f.FormField == formDefinition.KeyField).DataField;
        var fields = formDefinition.Fields;
        var form = formDefinition.Form;
        var databaseViewName = string.Concat(FullTextIndexViewPrefix, form);
        var fullTextIndexCommand = $"CREATE FULLTEXT INDEX ON [{this.Schema}].{databaseViewName}(SearchText) KEY INDEX IX_{databaseViewName} ON {FullTextCatalogName}";
        var fullTextIndexViewCommand = this.GetFullTextIndexViewCommand(keyDataField, databaseViewName, formDefinition.FullTextSearch.DataEntity, fields);
        var uniqueIndexCommand = $"CREATE UNIQUE CLUSTERED INDEX IX_{databaseViewName} ON [{this.Schema}].{databaseViewName}({keyDataField})";

        db.Execute(fullTextIndexViewCommand);
        db.Execute(uniqueIndexCommand);
        db.Execute(fullTextIndexCommand);
     }

我可以确认在这些语句之后,FullTextIndexViewCommand 已成功执行。 uniqueIndexCommand 已成功执行。 但是 FullTextIndexCommand 给了我以下错误(我在 SQL management studio 中重新创建了错误,因此有额外的行,但错误是相同的):

Msg 574, Level 16, State 0, Line 2
CREATE FULLTEXT INDEX statement cannot be used inside a user transaction.

我尝试做了一些事情:

我想做的事情:

我想在没有事务的情况下创建全文索引。

亲切的问候

据推测,GetFullTextIndexViewCommand 正在调用 BeginTransaction 或以某种方式引起用户交易

经过一天半的时间,我终于找到了答案。 问题是我们正在使用 ASP.Net 样板。 ABP 使用 Unit Of Work

ASP.NET Boilerplate opens a database connection (it may not be opened immediately, but opened in first database usage, based on ORM provider implementation) and begins a transaction when entering a unit of work method.

我基本上必须禁用此方法中的事务使用才能正常工作。