I have problem and i think its a deadlock and i cant resolve the problem. I know there simular problem discuse but i need help. When i try to saveChange on productReposotory it stuck and dont execute the other code.
Here is my controller:
public IActionResult All(string type) { var viewModel = new AllFireplaceViewModel { Fireplaces = this.fireplaceService.GetAllFireplaceAsync<IndexFireplaceViewModel>(type).Where(x => x.TypeOfChamber == type), };
return this.View(viewModel);
}
My 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); }
And this is my implementation of the interface:
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(); } This is the productService.AddProductAsync: 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(); }
And my Add Action
public IActionResult Add() { var createFireplaceInputModel = new FireplaceInputModel(); return this.View(createFireplaceInputModel); }