我一直在我的項目中使用實體框架(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