我试图在我的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管理工作室中重新创建了错误,因此额外的行,但错误是相同的):
Msg 574, Level 16, State 0, Line 2
CREATE FULLTEXT INDEX statement cannot be used inside a user transaction.
我想在没有交易的情况下创建FULLTEXT INDEX。
亲切的问候
答案 0 :(得分:2)
经过一天又一半,我终于找到了答案。 问题是我们正在使用ASP.Net Boilerplate。 ABP使用Unit Of Work
ASP.NET Boilerplate打开数据库连接(可能不会立即打开,但在第一次使用数据库时打开,基于ORM提供程序实现)并在输入工作单元方法时开始事务。
我基本上不得不禁用此方法中的事务使用。
答案 1 :(得分:0)
猜测,GetFullTextIndexViewCommand
正在调用BeginTransaction
或以某种方式导致用户交易