我一直在我的项目中使用实体框架(VS2010 Framework 4.0)。我在使用每个表单的不同对象上下文时遇到了一些麻烦。我之后做的是在主菜单窗体中创建一个对象上下文(保持打开状态),并且每次创建并显示一个窗体时,都会将该对象上下文传递给此新窗体。例如:实体框架对象上下文保存未添加的新实体
public partial class frm_Menu : Base
{
public Sistema_financiero_Entities db = new Sistema_financiero_Entities();
private void cancelarCuotaToolStripMenuItem_Click(object sender, EventArgs e)
{
frm_Cancelacion_Cuota Form1 = new frm_Cancelacion_Cuota();
Form1.db = db;
Form1.Show();
}
}
好了,该解决方案运行良好,直至现在,因为我需要使用和传递对象抛出型动物的形式,有时,如果对象的语境是不同的,我得到了一个错误。
现在,我用这种方法检测到了一个很大的问题。我有一张表格,我可以在这里支付不同的贷款分期付款。我会附上一张图片,以便你能看到我在说什么。
在那里,你选择要支付不同的分期付款。然后,你介绍一下你在“Cobrado总共”中最终付出的价值。这是重要的事情:当复选框图像被选中(蓝色 - 已经在图像中被检查过)时,我创建了一个“付款”实体。每个“付款”对象都存储在一个列表中。如果我取消选中它,我可以改变这个值,同样的事情就完成了。显然,我在清理清单之前做了list.Clear();
。然后,选中一个复选框,我可以按“Aceptar”(接受)。在那里,我在数据库中添加了列表中的每个“付款”(PAGO)。之后,我保存所有更改。
foreach (Pago p in Lista_nuevos_pagos)
{
db.AddToPago(p);
}
try
{
db.SaveChanges();
this.Close();
}
我的问题是,它不仅在列表中添加这些“付款”,而且在清除之前在列表中添加了其他“付款”实体。我得出的结论是,当我清除列表时,对象保留在对象上下文中。我认为,如果实体不在数据库中,我必须将其添加到对象上下文中的实体,就像我对pago(db.AddToPago(p);
)所做的那样。
我想问你们,我该如何解决这个问题。我解决它现在这样做:相反
private void cancelarCuotaToolStripMenuItem_Click(object sender, EventArgs e)
{
Sistema_financiero_Entities db = new Sistema_financiero_Entities();
frm_Cancelacion_Cuota Form1 = new frm_Cancelacion_Cuota();
Form1.db = db;
Form1.Show();
}
创建只有一个为各种形式的全球数据库,我创建一个在每个表单的主菜单。然后,在这种形式的封闭事件中,我处理该对象上下文。 然后,当我选中该复选框形象,打造“金”之前,我从对象上下文删除每一个“帕”实体:
foreach (Pago p in Lista_nuevos_pagos)
{
db.DeleteObject(p);
}
Lista_nuevos_pagos.Clear();
这样做可以正常工作,但I'm仍然有一些麻烦其他创建的实体(分期付款)在清除清单时不会被删除。我认为我错了,这就是为什么我需要一些方向正确使用EF。我真的需要尽快完成这项工作,我没有太多时间阅读EF教程。
以防万一,我这是怎么创建的每一个“帕”(支付)
Pago p = new Pago();
p.desc_aumento_intereses = nudwb1.Value;
p.desc_aumento_punitorios = nudwb2.Value;
p.desc_aumento_gastos = nudwb3.Value;
p.desc_aumento_comision = nudwb4.Value;
p.cotizacion = ntxt_Cotizacion.Value;
p.fecha_hora = fecha_hora;
Cuota c = new Cuota();
string name = tbx.Name.Substring(tbx.Name.IndexOf("-") + 1);
int nro_cuota = Convert.ToInt32(name);
c = Lista_cuotas_cobrar.Where(x => x.num_cuota == nro_cuota).First();
p.Cuota.Add(c);
谢谢您的阅读,我知道这是一个大量的信息。希望一些指导很快..
哇!这是一个很好的形式。你用这个控制表的列表“Fecha de vencimineto”吗? – Blocked
谢谢,实际上它是一个带有自定义绘画事件的DataGridView。我还没有使用任何第三方控制。 – Andres