Harry_C
Harry_C

Reputation: 177

Cannot get my database-update to work

I have launched my website in beta-version. The next version should contain a shopping cart and a checkout with the credit card. On my way to making this shopping cart, I've discovered that my old Product-class with several different prices simply doesn't work. I need one price with one identity or a subclass with several prices mapped to the original class(which I will use) :

       public class Product
    {
    [Key]
    public int ProductID { get; set; }

    [Required(ErrorMessage = "Please enter an product name")]
    public string Name { get; set; }

    [Required(ErrorMessage = "Please specify a category")]
    public string Category { get; set; }

    public string SubCategory { get; set; }

    public string Description { get; set; }

    public decimal Price16 { get; set; }

    public decimal Price12 { get; set; }

    public decimal Price8 { get; set; }

    public decimal Price4 { get; set; }


    public decimal PriceEach { get; set; }

    public decimal PriceKg { get; set; }

    public string ProductImageSmallUrl { get; set; }

    public string ProductImageSmallAlternativeDescription { get; set; }

    public string ProductImageSmallContentType { get; set; }

    public string ProductImageLargeUrl { get; set; }

    public string ProductImageLargeAlternativeDescription { get; set; }

    public string ProductImageLargeContentType { get; set; }

    public string ProductImageLargeSecondUrl { get; set; }

    public string ProductImageLargeSecondAlternativeDescription { get;
    set; }

    public string ProductImageLargeSecondContentType { get; set; }

    }

I have after, a lot of research constructed two classes:

   public class Product
   {
    public Product(ICollection<Price> prices)
    {
        Prices = prices;
    }

    [Key]
    public int ProductID { get; set; }

    [Required(ErrorMessage = "Please enter an product name")]
    public string Name { get; set; }

    [Required(ErrorMessage = "Please specify a category")]
    public string Category { get; set; }

    public string SubCategory { get; set; }

    public string Description { get; set; }

    public string ProductImageSmallUrl { get; set; }

    public string ProductImageSmallAlternativeDescription { get; set; }

    public string ProductImageSmallContentType { get; set; }

    public string ProductImageLargeUrl { get; set; }

    public string ProductImageLargeAlternativeDescription { get; set; }

    public string ProductImageLargeContentType { get; set; }

    public string ProductImageLargeSecondUrl { get; set; }

    public string ProductImageLargeSecondAlternativeDescription { get;
   set; }

    public string ProductImageLargeSecondContentType { get; set; }

    public ICollection<Price> Prices { get; set; }

   }

  And a price class:

  public class Price
   {
    [Key]
    public int ID { get; set; }
    public int CurrentProductID { get; set; }
    public string Size { get; set; }
    public decimal Value { get; set; }

    public Product CurrentProduct { get; set; }

   }

I have this DbContext:

    public class ApplicationDbContext : DbContext
    {
    public ApplicationDbContext(DbContextOptions<MokaMokkaDbContext>  
   options)
        :base(options) {}

    public DbSet<Product> Products { get; set; }
    public DbSet<Price> Prices { get; set; }

    protected override void OnModelCreating (ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Price>()
            .HasOne(p => p.CurrentProduct)
            .WithMany(b => b.Prices)
            .HasForeignKey(p => p.CurrentProductID);

    }
   }

I am trying to write a seeding class:

      public class SeedData
      {
        public static EnsurePopulated(IApplicationBuilder app)
        {
        MokaMokkaDbContext context = app.ApplicationServices
            .GetRequiredService<MokaMokkaDbContext>();
        context.Database.Migrate();
        if(!context.Products.Any())
        {
            context.Products.AddRange(
                new Product
                {
                    Name = "Dobos cake",
                    Category = "Cake",
                    ProductImageSmallUrl = "Dobos.Torta.jpg",
                    ProductImageSmallContentType = "jpg",
                    Prices = new List<Price>()
                });
               }
             }

But I get the following problem in over the red underline of the Product I am trying to create: "There is no argument given that corresponds to the required formal parameter "prices" of Product.Product(ICollection)".

Upvotes: 0

Views: 59

Answers (1)

Peska
Peska

Reputation: 4140

I believe you need parameterless constructor in your Product class.

Upvotes: 1

Related Questions