我想使用Umbraco Forms不仅可以插入数据,还可以编辑数据。到目前为止,当我想编辑一条记录时,我通过querystring传递表单guid和记录id,并在字段中填充正确的数据。到目前为止一切顺利。
然后我成功地连接到Umbraco.Forms.Data.Storage.RecordStorage.RecordInserting事件,如下所示
void RecordStorage_RecordInserting(object sender, Umbraco.Forms.Core.RecordEventArgs e)
{
var ms = (Umbraco.Forms.Data.Storage.RecordStorage)sender;
if(this record exists){
ms.UpdateRecord(e.Record, e.Form);
}
}
然而,当我尝试提交一个编辑过的记录时,ms.RecordUpdate(e。记录,e.Form)行运行我得到这个错误
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_UFRecordDataString_UFRecordFields_Key". The conflict occurred in database "UmbracoPlay", table "dbo.UFRecordFields", column 'Key'.
The statement has been terminated.
我不能删除旧的记录,然后插入一个新的记录,因为它会重新引发相同的事件,每次我调用ms.InsertRecord
我错过了什么?如何使用Umbraco Forms编辑现有数据?
我看不到这个bug的修复-看起来好像UpdateRecord
方法实际上试图第二次插入所有UFRecordField
对象,而不是更新现有值(或现有字段值),导致这个键冲突。
如果你真的需要解决这个问题——就像我做的那样——那么一个有效的方法(但会让你的主键更加碎片化)就是简单地删除然后重新插入表单数据:
var ms = (Umbraco.Forms.Data.Storage.RecordStorage)sender;
if(this record exists){
ms.DeleteRecord(e.Record, e.Form);
ms.InsertRecord(e.Record, e.Form);
}