public async Task AddAsync(UniqueStoreItem item, CancellationToken cancel) { using (var db = await _db.CreateAsync(cancel).ConfigureFalse()) { using (var t = db.BeginTransaction()) { if (await db.IsDuplicateOperationAsync(item.ToIdempotencyId(), cancel)) { return; } try { item.Uniques .Select(d => new UniqueStoreRow(item.EntityId, d.Scope, d.Aspect, d.Value, item.Bucket)) .ForEach(row => db.Insert(row)); t.Commit(); } catch (DbException ex) when(db.IsUniqueViolation(ex)) { throw new UniqueStoreDuplicateException(ex.Message); } } } }
private Task Insert() { var item = new UniqueStoreItem(_entityId, Guid.NewGuid() , new UniqueValue("test", scope: Scope) , new UniqueValue("test-p", OtherAspect, scope: Scope) ); return(_sut.AddAsync(item, CancellationToken.None)); }