SaveChangesAsyn c () застревает - PullRequest
0 голосов
/ 10 марта 2020

У меня есть проблема, и я думаю, что это тупик, и я не могу решить проблему. Я знаю, что это симуляция проблемы, но мне нужна помощь. Когда я пытаюсь сохранитьChange для productReposotory, он зависает и не выполняет другой код.

Вот мой контроллер:

 public IActionResult All(string type)
    {
        var viewModel = new AllFireplaceViewModel
        {
            Fireplaces =
                this.fireplaceService.GetAllFireplaceAsync<IndexFireplaceViewModel>(type).Where(x => x.TypeOfChamber == type),
        };

        return this.View(viewModel);
    }

Мой IFireplaceService:

using System.Collections.Generic;
using System.Threading.Tasks;

using KaminiCenter.Web.ViewModels.Fireplace;

public interface IFireplaceService
{
    Task AddFireplaceAsync(FireplaceInputModel fireplaceInputModel);

    IEnumerable<T> GetAllFireplaceAsync<T>(string type);

    T GetByName<T>(string name);
}

И это моя реализация интерфейса:

public async Task AddFireplaceAsync(FireplaceInputModel model)
    {
        var typeOfChamber = Enum.Parse<TypeOfChamber>(model.TypeOfChamber);

        if (model.Power == null ||
            model.Size == null ||
            model.Chimney == null)
        {
            throw new ArgumentNullException("Cannot safe null or whitespace values!");
        }

        await this.productService.AddProductAsync(model.Name, model.Group);
        var productId = this.productService.GetIdByNameAndGroup(model.Name, model.Group);
        var groupId = this.groupService.FindByGroupName(model.Group).Id;

        var fireplace = new Fireplace_chamber
        {
            Id = Guid.NewGuid().ToString(),
            Power = model.Power,
            Size = model.Size,
            Chimney = model.Chimney,
            Price = model.Price,
            Description = model.Description,
            ImagePath = model.ImagePath.ToString(),
            TypeOfChamber = typeOfChamber,
            ProductId = productId,
            GroupId = groupId,
            CreatedOn = DateTime.UtcNow,
            ModifiedOn = DateTime.UtcNow,
        };

        await this.fireplaceRepository.AddAsync(fireplace);
        await this.fireplaceRepository.SaveChangesAsync();
    }

Это productService.AddProductAsyn c:

public async Task AddProductAsync(string name, string groupName)
    {
        var group = this.groupService.FindByGroupName(groupName);

        if (group == null)
        {
            await this.groupService.CreateAsync(groupName);
        }

        var product = new Product
        {
            // TO Check for Id Initializesion
            Id = Guid.NewGuid().ToString(),
            Name = name,
            GroupId = group.Id,
            CreatedOn = DateTime.UtcNow,
            ModifiedOn = DateTime.UtcNow,
        };

        await this.productRepository.AddAsync(product);
        await this.productRepository.SaveChangesAsync();
    }

И мое действие Add

public IActionResult Add()
    {
        var createFireplaceInputModel = new FireplaceInputModel();

        return this.View(createFireplaceInputModel);
    }
...