0
{
   public class EFProductRepository : IProductsRepository
    {
        private EFDbContext context = new EFDbContext();

        public IQueryable<Product> Products {
            get { return context.Products; }

        }

        public void SaveProduct(Product product)
        {
            if (product.ProductID == 0)
            {
                context.Products.Add(product);
            }
            else 
            {
               Product prod = context.Products.First(x => x.ProductID ==             product.ProductID);
                prod.Description = product.Description;
                prod.Category = product.Category;
                prod.Name = product.Name;
                prod.Price = product.Price;
            }


            context.SaveChanges();


        }

        public void DeleteProduct(Product product) {

            context.Products.Remove(product);
            context.SaveChanges();


        }

    }
}

私はASP.NETにかなり慣れていないので、チュートリアルを行っているときに、コンテキストへの保存がどのように機能するかを理解するのに苦労しています。特に、この部分を意味します。

  else 
                {
                   Product prod = context.Products.First(x => x.ProductID ==             product.ProductID);
                    prod.Description = product.Description;
                    prod.Category = product.Category;
                    prod.Name = product.Name;
                    prod.Price = product.Price;
                }


                context.SaveChanges();

OOPについて学んだことから、ローカルで作成されたオブジェクトは、それが作成された範囲内にのみ存在します。「Product product」から変更された値を含む「Productprod」は、どのようにして「context」に関連付けられ、正常に保存されますか。変更?

また、「context.SaveChanges()」呼び出しは「Product」タイプのパラメーターを送信しないため、どのように機能しますか?

4

1 に答える 1

1
           {
               Product prod = context.Products.First(x => x.ProductID == ...
                prod.Description = product.Description;
                prod.Category = product.Category;
                prod.Name = product.Name;
                prod.Price = product.Price;
            }

これprodは、からの特定のアイテムcontextであり、一意のIDが割り当てられているために機能します。この例では、ID以外の他のプロパティを変更できます。この例では、説明、カテゴリ、名前、価格であり、コンテクスト。コンテキストは、そこからプルされたオブジェクトに変更が加えられたことを認識しているため、context.saveChanges()機能します。これを行う場合:

           {
                Product prod = new Product()
                prod.Description = product.Description;
                prod.Category = product.Category;
                prod.Name = product.Name;
                prod.Price = product.Price;
            }

コンテキストからプルされたオブジェクトではないため、これは機能しません。この場合、挿入を行う必要があります。その後、saveChangesそれが意味をなさない場合は、おそらくもっと説明できます

于 2013-01-14T00:17:48.890 に答える