【问题标题】:Having a problem updating table in Linq to Entities with update statement but not updating the table在 Linq to Entities 中使用 update 语句更新表但未更新表时出现问题
【发布时间】:2011-08-22 12:01:36
【问题描述】:

我有一个带有添加、编辑和保存按钮的表单。该表单还有一个 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);           

   }

【问题讨论】:

  • 在使用数据上下文时要小心 [我认为这就是 tgsentity 是] 就好像你使用多个没有生命周期管理的情况下你一定会遇到保存问题。尝试放置一个断点并检查 pd 的 EntityState,如果它是 EntityState.Modified 它应该可以工作,如果不是,请重构您的代码,以便您只使用一个数据上下文。
  • 这是我的 dbcontext 名称,pd1 是表产品的对象..
  • 您是否使用任何其他 dbcontext?你检查过 pd.EntityState 了吗?
  • 不,这只是我使用的一个 dbcontext 我在哪里检查 pd.entitysate
  • 为什么在编辑中删除AddToProducts 行?该代码现在不再有意义:您正在创建一个新的product1 (pd) 和一个新的category (c),然后对它们什么都不做。我也不明白为什么您在 Save 事件处理程序中添加新实体而不是 Add 事件。 Save 应该保存,Add 应该添加,不是吗?您有一个 Add 按钮和一个 Edit 按钮。他们的目的不正是区分创建新实体和更新实体吗?当您在 AddEdit 事件中展示您所拥有的内容时,也许更容易理解问题。

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


【解决方案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(); 
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • @jlafry 你有什么想法请帮忙
    猜你喜欢
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    相关资源
    最近更新 更多