C# 使用update语句将Linq中的表更新为实体但不更新表时出现问题
我有一个带有添加、编辑和保存按钮的表单。该表单还具有datagridview 我这样做是为了更新现有的产品实体和添加新的产品实体,然后在datagridview中显示修改后的数据 当我单击编辑按钮时,将显示保存按钮,并执行我在保存按钮中编写的语句 新产品实体添加得很好 我的问题是,当我单击edit按钮时,一个新行被添加到datagridview,而不是更新同一行 在实体框架中添加到表之前,是否有方法检查表中的可用产品是否正在更新或添加新产品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
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您能帮我了解一下吗