Reputation: 2457
I'm curious if there is a clean way to do this
Product product = new Product();
product.CreateDateTime = DateTime.Now;
product.Description = productCreateModel.Product.Description;
product.ManufacturerId = productCreateModel.Manufacturer;
product.MetaDescription = productCreateModel.Product.MetaDescription;
product.MetaTitle = productCreateModel.Product.MetaTitle;
product.Name = productCreateModel.Product.Name;
product.Status = ProductStatuses.Active;
product.URL = productCreateModel.Product.URL;
if (productCreateModel.ProductImage1.ContentLength > 0)
{
BinaryReader binaryReader = new BinaryReader(productCreateModel.ProductImage1.InputStream);
product.ProductImages.Add(new ProductImage()
{
CreateDateTime = DateTime.Now,
Image = binaryReader.ReadBytes(productCreateModel.ProductImage1.ContentLength),
PrimaryImage = true
});
}
db.Products.Add(product);
db.SaveChanges();
The problem i'm running into is that the product.ProductImages is null - I'd love to be able to do it this way INSTEAD of doing multiple db.TableName.Add/db.SaveChanges because if I understand it correctly EF creates a transaction so that if anything fails you won't have phantom product records inserted with no product images - if that makes sense?
Upvotes: 4
Views: 583
Reputation: 4218
I'm just brain storming here so don't get upset if this doesn't work, but I think you might need to explicitly add the new ProductImage entity to the db.ProductImages entity set before you link it to the Product entity.
Product product = new Product();
product.CreateDateTime = DateTime.Now;
product.Description = productCreateModel.Product.Description;
product.ManufacturerId = productCreateModel.Manufacturer;
product.MetaDescription = productCreateModel.Product.MetaDescription;
product.MetaTitle = productCreateModel.Product.MetaTitle;
product.Name = productCreateModel.Product.Name;
product.Status = ProductStatuses.Active;
product.URL = productCreateModel.Product.URL;
db.Products.Add(product);
if (productCreateModel.ProductImage1.ContentLength > 0)
{
BinaryReader binaryReader = new BinaryReader(productCreateModel.ProductImage1.InputStream);
ProductImage image = new ProductImage()
{
CreateDateTime = DateTime.Now,
Image = binaryReader.ReadBytes(productCreateModel.ProductImage1.ContentLength),
PrimaryImage = true
}
db.ProductImages.Add(image); // Add the image to the ProductImage entity set
product.ProductImages.Add(image); // link the image to this Product
}
db.SaveChanges(); // Save all changes
Upvotes: 0
Reputation: 60493
change your Product Model ?
private IList<ProductImage> productImages_;
public virtual IList<ProductImage> ProductImages {
get {
return productImages_ ?? (productImages_= new List<ProductImage>());
}
set { productImages_ = value;}
}
Upvotes: 4