用PetaPoco创建一个全文索引

本文关键字:一个 全文索引 PetaPoco 创建 | 更新日期: 2023-09-27 18:08:58

我试图在我的sql数据库中创建一个petapoco的全文索引。我的编程语言是c#这里是一个小片段的代码,我试图执行:小提示:方法本。GetFullTextIndexViewCommand(keyDataField, databaseViewName, formdefinition。DataEntity、字段);相当长,它生成基于给定字段创建视图的命令。

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管理工作室中重新创建了错误,因此额外的行,但错误是相同的):

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

我试着做了几件事:

    我读了这个错误的原因,我完全明白了。
  • 把db.Execute(fullTextIndexCommand)放在它自己的using语句中。没有运气
  • 验证没有其他逻辑正在创建事务。
  • 如果我观察db变量,我看到:_transaction: null和_transactionCancelled: false
  • 我也读了一些关于事务范围的信息,但我认为我不需要。

我想做什么:

我想创建没有事务的FULLTEXT INDEX。

亲切的问候

用PetaPoco创建一个全文索引

一天半后,我终于找到了答案。问题是我们使用的是ASP。净样板。ABP使用工作单元

ASP。NET Boilerplate打开一个数据库连接(它可能不会立即打开,但在第一次使用数据库时打开,基于ORM提供程序实现),并在进入工作单元方法时开始一个事务。

我基本上必须在这个方法中禁用事务的使用。

猜测,GetFullTextIndexViewCommand正在呼叫BeginTransaction或以某种方式引起用户事务