用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。
亲切的问候
一天半后,我终于找到了答案。问题是我们使用的是ASP。净样板。ABP使用工作单元
ASP。NET Boilerplate打开一个数据库连接(它可能不会立即打开,但在第一次使用数据库时打开,基于ORM提供程序实现),并在进入工作单元方法时开始一个事务。
我基本上必须在这个方法中禁用事务的使用。
猜测,GetFullTextIndexViewCommand
正在呼叫BeginTransaction
或以某种方式引起用户事务