我有一些 LinqToSQL 对象。其中一个有一个“二进制”列,我认为它是 SQL 上的 VarBinary(max)。
时不时地,我需要为某一行添加/连接一个字节数组到该列中。我就是这样做的:
void StoreBytesInDb(IEnumerable<byte> bytesToStore)
{
using (var dataBaseContext = new MyDataClasses(DatabaseInfo.ConnectionString))
{
if (this.currentObjectId == -1)
{
this.NewObjectToDatabase();
this.currentSavedBytes = new List<byte>();
}
this.CurrentObject = dataBaseContext.Objects.Single(e => e.Id_Object == this.currentObjectId);
this.currentSavedBytes.AddRange(bytesToStore);
this.CurrentObject.Bytes_Data = this.currentSavedBytes.ToArray();
dataBaseContext.SubmitChanges();
}
}
因此,如您所见:
- 我使用 Linq 将“AddRange”添加到保存的字节中(在堆中)。
- 然后我把它放到对象的右栏中。
- 提交更改。
在低速下它工作。
当我将其加速到每秒几次时,就会出现问题。 有时它会抛出一个 'System.ArgumentException' 说:“已经添加了具有相同键的项目。” 引发异常的确切行是:
this.CurrentObject.Bytes_Data = currentSavedBytes.ToArray();
关于如何改善这一点的任何提示?