2012-10-05 2 views
4

내가 실행 해요 문제는 product.ProductImages가 null이다이삽입 관련 기록 엔티티 프레임 워크를 통해 데이터베이스에

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

을 할 수있는 깨끗한 방법이 있는지 궁금 해요 - 내가 좋겠 이 방식으로 할 수 있기를 좋아합니다 여러 db.TableName.Add/db.SaveChanges를 수행하는 대신에 그것을 올바르게 수행 할 수 있어야합니다. 올바르게 이해하면 EF는 트랜잭션을 생성하므로 어떤 제품 이미지도 삽입되지 않은 팬텀 제품 레코드가 생성되지 않습니다 그 말이 맞는다면?

+0

얼마나 많은 객체를 추가했는지 관계가 무엇이든 관계없이 하나의'db.SaveChanges()'만으로도이 작업을 수행 할 수 있습니다. – Bobson

답변

4

제품 모델을 변경 하시겠습니까?

private IList<ProductImage> productImages_; 
public virtual IList<ProductImage> ProductImages { 
    get { 
    return productImages_ ?? (productImages_= new List<ProductImage>()); 
    } 
    set { productImages_ = value;} 
} 
+0

이 코드는 완벽하게 작동했습니다. 코드 우선을 사용하면서 작동하지 않을 것이라고 생각했는데 .net이이 문제를 이해하고 여전히 내 데이터베이스에 적절하게 연결하는지는 확실하지 않았습니다. 그러나 이것이 완벽했습니다. 감사합니다. – 99823

+0

@Loren well, 단순한'public virtual MyList {get; set;}'은 예제에서 자주 제시되지만, 모델을 인스턴스화해야 할 때 (그리고 "네비게이션 목록"을 인스턴스화해야 할 때)이 방법이 선호되어야합니다. –

0

나는이 작동하지 않는 경우에 너무 흥분하지 않습니다 여기에 돌진 단지 뇌 해요,하지만 난 당신이 명시 적으로 연결하기 전에 설정 db.ProductImages 엔티티에 새로운 ProductImage 엔티티를 추가 할 필요가 있다고 생각 제품 엔터티로 가져옵니다.

+0

hmmm, 문제가 없습니다. 그냥 product.ProductImages (모델'Product'의 "navigation list")가 인스턴스화되지 않았습니다 ... 그리고 null 목록에 항목을 추가하기가 어렵습니다.) –

+0

그런 다음 db.ProductImages.Add()를 호출 할 때 NullReferenceException이 발생해야합니다. –

+0

맞아요 - 이것에 관한 건 제가 이걸 할 수 있다는 것을 압니다 제가 모든 db.tablename.adds를 다 할 필요가 없기 때문에 그것을 깨끗하게 유지하려고 노력했습니다 - 무슨 뜻인지 아시겠습니까? 시도해 주셔서 고마워요! Raphael의 솔루션이 트릭을 만들었습니다. – 99823

관련 문제