Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用update语句将Linq中的表更新为实体但不更新表时出现问题_C#_.net_Linq_Entity Framework_Linq To Entities - Fatal编程技术网

C# 使用update语句将Linq中的表更新为实体但不更新表时出现问题

C# 使用update语句将Linq中的表更新为实体但不更新表时出现问题,c#,.net,linq,entity-framework,linq-to-entities,C#,.net,Linq,Entity Framework,Linq To Entities,我有一个带有添加、编辑和保存按钮的表单。该表单还具有datagridview 我这样做是为了更新现有的产品实体和添加新的产品实体,然后在datagridview中显示修改后的数据 当我单击编辑按钮时,将显示保存按钮,并执行我在保存按钮中编写的语句 新产品实体添加得很好 我的问题是,当我单击edit按钮时,一个新行被添加到datagridview,而不是更新同一行 在实体框架中添加到表之前,是否有方法检查表中的可用产品是否正在更新或添加新产品 private void btnSave_Cl

我有一个带有添加、编辑和保存按钮的表单。该表单还具有datagridview

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

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

新产品实体添加得很好

我的问题是,当我单击edit按钮时,一个新行被添加到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);           

   }

这只是一个例子。您需要做的是从使用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(); 
}

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

在使用数据上下文时要小心[我想这就是tgsentity的含义],因为如果您使用多个上下文,而没有一些生命周期管理,则必然会遇到保存问题。尝试放置一个断点并签出pd的EntityState(如果它是EntityState)。修改后应该可以工作,如果不行,请重构代码,以便只使用一个数据上下文。这是我的dbcontext名称,pd1是表产品的对象。是否使用其他dbcontext?是否检查了pd.EntityState?否这只是我使用的一个dbcontext我在哪里检查pd.EntityState为什么删除编辑中的
AddToProducts
行?代码现在不再有意义了:您正在创建一个新的
product1
pd
)和一个新的
类别(
c
),然后什么也不做。我也不明白为什么在
Save
事件处理程序中添加新实体,而不是在
add
事件中添加新实体<代码>保存
应该保存和添加应该添加,不是吗?您有一个
添加
按钮和一个
编辑
按钮。它们的目的不正是为了区分创建新实体和更新实体吗?当您显示您的
添加
编辑
事件中的内容时,也许更好地理解这个问题。@jlafry您能帮我了解一下吗