public async Task ExecuteAsync_TableValueInsertForFields_DoesNotThrowException() { var internalId = new Field { Name = "INS_Internal ID", Description = "Unique ID used internally" }; var firstName = new Field { Name = "INS_First Name", Description = "The person's first name" }; var lastName = new Field { Name = "INS_Last Name", Description = "The person's last name" }; var yearlyWage = new Field { Name = "INS_Yearly Wage", Description = "The base wage paid year over year." }; var hireDate = new Field { Name = "INS_Hire Date", Description = "The date and time of hire for the person" }; var bonusTarget = new Field { Name = "INS_Bonus Target", Description = "The target bonus for the person" }; var contactNumbers = new Field { Name = "INS_Contact Numbers", Description = "A list of contact numbers for the person in order of preference" }; var fields = new List <Field> { internalId, firstName, lastName, yearlyWage, hireDate, bonusTarget, contactNumbers }; var providerFactory = new SqlClientProviderFactory(new DataAnnotationsDefinitionProvider()); var cancellationToken = CancellationToken.None; await using (var provider = providerFactory.Create(ConfigurationRoot.GetConnectionString("OrmTestDb"))) { var transaction = await provider.BeginTransactionAsync(cancellationToken).ConfigureAwait(false); // Set up the structured command provider. var fieldRepository = new EntityRepository <Field, FieldRow>(provider, this.mapper); var fieldValueRepository = new EntityRepository <FieldValue, FieldValueRow>(provider, this.mapper); // Delete the existing rows. var fieldSelection = Query.Select <FieldRow>().Where(set => set.AreEqual(row => row.Name, "INS_%")); var existingFields = new List <Field>(); await foreach (var item in fieldRepository.SelectEntitiesAsync(fieldSelection, cancellationToken).ConfigureAwait(false)) { existingFields.Add(item); } await fieldValueRepository.DeleteSelectionAsync( Query.Select <FieldValueRow>() .Where(set => set.Include(row => row.FieldId, existingFields.Select(field => field.FieldId).ToArray())), cancellationToken) .ConfigureAwait(false); await fieldRepository.DeleteSelectionAsync(fieldSelection, cancellationToken).ConfigureAwait(false); var fieldInsertCommand = new TableValuedInsert <FieldRow>(provider.DatabaseContext); await fieldInsertCommand.ExecuteAsync( fields.Select( field => new FieldTableTypeRow { Name = field.Name, Description = field.Description }), cancellationToken) .ConfigureAwait(false); await transaction.CommitAsync(cancellationToken).ConfigureAwait(false); } }