【发布时间】: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按钮。他们的目的不正是区分创建新实体和更新实体吗?当您在Add和Edit事件中展示您所拥有的内容时,也许更容易理解问题。
标签: c# .net linq entity-framework linq-to-entities