skip to Main Content

so basically my idea is that every product added to the database should have its name, price and the name of the user who created it assigned to it. I’m getting user and checking if user exists in the database. If he is im creating new product which is productDto instance. and finally when I want to add new product to user’s entity Product List I’m occuring a problem that say’s "you cannot convert from ProductDto to Product entity". How to overcome this? Any tips?

public async Task < ActionResult < ProductDto[] >> AddProduct(string username,
  ProductDto productDto) {

  User u = await _context.Users
    .Where(x => x.UserName == username)
    .Include(x => x.Products)
    .SingleOrDefaultAsync();

  if (u != null) {
    var product = new ProductDto {
      Name = productDto.Name,
        Price = productDto.Price,
        Username = u.UserName
    };
    u.Products.Add(product); // Im getting problem here
    await _context.SaveChangesAsync();
  }
  return u.Products.ToArray();
}

Here are my entities:

public class User : BaseEntity
{
    public string UserName { get; set; }
    public List<Product> Products { get; set; }
}

public class Product : BaseEntity
{
    public string Name { get; set; }
    public decimal Price { get; set ;}
    public User User { get; set; }
    public int UserId { get; set; }
}

public class ProductDto
{
    public string Name { get; set; }
    public string Username { get; set; }
    public decimal Price { get; set; }
}

2

Answers


  1. The issue is u.Products is a list of Product entities. So you cannot add ProductDto to it. Therefore you need change your code like this. create a new Product entity and set values based on the values in the ProductDto.

    var product = new Product
    {
        Name = productDto.Name,
        Price = productDto.Price,
        User = u
    };
    u.Products.Add(product);
    
    Login or Signup to reply.
  2. So here

     var product = new ProductDto
               {
                    Name = productDto.Name,
                    Price = productDto.Price,
                    Username = u.UserName
               };
    

    You need var product = new Product not new ProductDto

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search