You don't specify the Product_Id for an InvoiceItem and that causes the problem. The Identity fields are used only for primary keys and based on you description, Product_ID is a foreign key so you must define the value for it, one way or another. So probably you should have
invoiceItem.SetParentRow(product);
As a side-note the row
product.SetParentRow(invoice);
looks odd since I doubt that invoice is a parent of product.