4

これを行うためのクリーンな方法があるかどうか知りたいです

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();

私が遭遇している問題は、product.ProductImagesがnullであるということです-正しく理解していればEFが作成するので、複数のdb.TableName.Add / db.SaveChangesを実行する代わりに、この方法で実行できるようにしたいと思います。何かが失敗した場合に、製品画像なしで幻の製品レコードが挿入されないようにするためのトランザクション-それが理にかなっている場合は?

4

2 に答える 2

4

製品モデルを変更しますか?

private IList<ProductImage> productImages_;
public virtual IList<ProductImage> ProductImages {
   get {
     return productImages_ ?? (productImages_= new List<ProductImage>());
   }
   set { productImages_ = value;}
}
于 2012-10-05T14:54:36.040 に答える
0

ここでブレイン ストーミングを行っているだけなので、これが機能しない場合でも動揺しないでください。ただし、新しい ProductImage エンティティを明示的に db.ProductImages エンティティ セットに追加してから、それを Product エンティティにリンクする必要があると思います。

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
于 2012-10-05T15:10:12.150 に答える