Ibr*_*GUN 14 c# ado.net entity-framework
我得到"对象无法删除,因为它没有在ObjectStateManager中找到".同时删除对象.
这是代码;
//first i am filling listview control.
private void Form1_Load(object sender, EventArgs e)
{
FirebirdEntity asa = new FirebirdEntity();
ObjectQuery<NEW_TABLE> sorgu = asa.NEW_TABLE;
foreach (var item in sorgu)
{
ListViewItem list = new ListViewItem();
list.Text = item.AD;
list.SubItems.Add(item.SOYAD);
list.Tag = item;
listView1.Items.Add(list);
}
//than getting New_table entity from listview's tag property.
private void button3_Click(object sender, EventArgs e)
{
using (FirebirdEntity arama = new FirebirdEntity())
{
NEW_TABLE del = (NEW_TABLE)listView1.SelectedItems[0].Tag;
arama.DeleteObject(del);
arama.SaveChanges();
}}
Run Code Online (Sandbox Code Playgroud)
jas*_*son 28
NEW_TABLE del = (NEW_TABLE)listView1.SelectedItems[0].Tag;
arama.Attach(del);
arama.DeleteObject(del);
arama.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
连接的对象由跟踪ObjectContext.这是执行删除和更新所必需的.您可以阅读有关在MSDN上附加对象的更多信息.
编辑以澄清附加/分离:
private void Form1_Load(object sender, EventArgs e) {
FirebirdEntity asa = new FirebirdEntity();
ObjectQuery<NEW_TABLE> sorgu = asa.NEW_TABLE;
foreach (var item in sorgu) {
asa.Detach(item);
// add to listView1
}
}
Run Code Online (Sandbox Code Playgroud)
此外,你应该ObjectContext在using块中包装你的s .
在您的方法"Form1_Load"中,您创建了"FirebirdEntity"上下文的FIRST实例,并使用从此上下文中选择的实体填充ListViewItem
在您的方法"button3_Click"中,您可以创建"FirebirdEntity"上下文的NEW,SECOND实例.然后,您尝试删除在第一个上下文中选择的SECOND上下文中的实体.
在两种方法中使用相同的上下文实例,一切都会正常工作.
(或者,您可以从SECOND上下文中选择要删除的实体,然后删除此实体而不是原始实体)
| 归档时间: |
|
| 查看次数: |
40407 次 |
| 最近记录: |