更新语句不适用于linq

时间:2011-08-22 15:41:44

标签: c# linq entity-framework linq-to-entities

我只是为了更新与类别表和产品表相关的表而感到疯狂......但是我在这方面取得了成功......

我有这些表

               product product_id
                       product_name 
                       product_description
                       product_price
                       product_image


              category  category_id
                        catgory_name
                        category_desc

我这样做是为了更新表....使用实体框架......

    private void btnSave_Click(object sender, EventArgs e)
    {

        if (lblHiddenmode.Text == "Edit")
        {
            using (var dbcontext = new TsgEntities())
            {
                pictureBox1.Enabled = true;
                pictureBox1.Visible = true;
                Image image = pictureBox1.Image;
                byte[] bit = null;

                bit = imageToByteArray(image);
                product1 pd = new product1();

                string category = cbcategorytypes.Text;
                string categorydesc = tbCategoryDescription.Text;

                var c = new category { category_Name = category, category_Description = categorydesc };

                pd.product_Name = tbProductName.Text;
                decimal price = Convert.ToDecimal(tbProductPrice.Text);
                pd.product_Price = price;
                pd.product_Description = tbProductdescription.Text;
                pd.product_Image = bit;
                pd.category = c;                    
                dbcontext.SaveChanges();                 
                this.Close();
            }
        }

  }

注意:我正在更新产品名称,其中product_id为4,category_id = 4

但它会在此声明中显示 pd.category = c; 我得到product_id =“0”和category_id =“0”

在使用类别表更新表时我做错了..更新语句是否有任何问题

2 个答案:

答案 0 :(得分:2)

上面的代码将生成插入,而不是更新。要执行更新,首先需要从上下文中检索product1实例。

我不知道你的上下文是什么样的,所以我不能发布确切的代码,但它会是这样的:

product1 pd = dbcontext.protucts.Where(p => p.productid == 4 
                                         && p.categoryid == 4).First();

然后,您可以进行更改并致电dbcontext.SaveChanges()并更新您的记录。

答案 1 :(得分:1)

您实际上并未将对象添加到上下文中。

您需要执行以下操作:

dbcontext.products.AddObject(pd1);