Exemple #1
0
        public async Task <DomainModels.SecondaryObject> CreateAsync(Guid primaryObjectId, ApiModels.SecondaryObject inputModel)
        {
            Ensure.That(primaryObjectId, nameof(primaryObjectId)).IsNotEmpty();
            Ensure.That(inputModel, nameof(inputModel)).IsNotNull();

            var domainPrimaryObject = await _primaryObjectRepoistory.GetByIdAsync(primaryObjectId);

            Ensure.That(domainPrimaryObject, nameof(domainPrimaryObject))
            .WithException(_ =>
            {
                var ex = new DemoEntityNotFoundException();
                ex.Data.Add($"{nameof(DomainModels.PrimaryObject)}.{nameof(DomainModels.PrimaryObject.Id)}", primaryObjectId.ToString());
                return(ex);
            })
            .IsNotNull();

            var domainSecondaryObject = new DomainModels.SecondaryObject(Guid.NewGuid());

            Map(inputModel, domainSecondaryObject);
            domainSecondaryObject.PrimaryObject    = domainPrimaryObject;
            domainSecondaryObject.PrimaryObject_Id = domainPrimaryObject.Id;
            domainPrimaryObject.SecondaryObjects.Add(domainSecondaryObject);

            await _unitOfWork.SaveChangesAsync();

            return(domainSecondaryObject);
        }
        public async Task DeleteAsync(Guid id)
        {
            Ensure.That(id, nameof(id)).IsNotEmpty();

            var domainPrimaryObject = await _primaryObjectRepoistory.GetByIdAsync(id);

            Ensure.That(domainPrimaryObject, nameof(domainPrimaryObject))
            .WithException(_ => GetDemoEntityNotFoundException(id))
            .IsNotNull();

            foreach (var domainSecondaryObject in domainPrimaryObject.SecondaryObjects.ToArray())
            {
                domainPrimaryObject.SecondaryObjects.Remove(domainSecondaryObject);
                _secondaryObjectRepository.Remove(domainSecondaryObject);
            }

            _primaryObjectRepoistory.Remove(domainPrimaryObject);

            await _unitOfWork.SaveChangesAsync();
        }