将Linq中的表更新为具有更新语句但不更新表的实体时出现问题

时间:2011-08-22 12:01:37

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

我有一个包含添加,编辑和保存按钮的表单。该表单还有一个datagridview。

我这样做是为了更新现有的产品实体并添加新的产品实体,然后在datagridview中显示更改的数据。

当我点击编辑按钮时,将显示保存按钮,并执行我在保存按钮中写入的语句。

新产品实体添加得很好。

我的问题是,当我点击编辑按钮时,会向datagridview添加一行,而不是更新同一行。

在添加到实体框架中的表之前,有没有办法检查表中的可用产品是否正在更新或添加新产品?

    private void btnSave_Click(object sender, EventArgs e)
    {

        pictureBox1.Enabled = true;
        pictureBox1.Visible = true;
        Image image = pictureBox1.Image;
        byte[] bit = null;

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

        string category = tbCategoryName.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;


        tsgentity.SaveChanges();
        EquipmentFinder equipment = new EquipmentFinder();            
        equipment.productgridview.Refresh();           
        this.Close();
        equipment.ShowDialog(this);           

   }

2 个答案:

答案 0 :(得分:1)

这只是一个例子。您需要做的是使用linq从正在编辑/保存的集合中提取当前对象,然后对检索到的对象进行更改,然后更新即。

public bool UpdateCustomer(Customer customer){   
    Customer cust = entities.Customers.FirstOrDefault(c => c.ID == customer.ID);  
    cust.Forname = customer.Forename;   
    cust.Surname = customer.Surname   
    entities.SaveChanges(); 
}

答案 1 :(得分:0)

您是否检查过这些按钮的事件处理程序?它们是否连接到正确的按钮?听起来你的编辑按钮正在为新产品触发事件处理程序,听起来像添加按钮正在触发用于编辑产品的事件处理程序。我肯定会先检查一下,而不是寻找解决方法或黑客来容忍它。