я получаю «Объект не может быть удален, потому что он не был найден в 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();
}}
Вам необходимо прикрепить объект к ObjectContext
. Пытаться:
NEW_TABLE del = (NEW_TABLE)listView1.SelectedItems[0].Tag;
arama.Attach(del);
arama.DeleteObject(del);
arama.SaveChanges();
Прикрепленные объекты отслеживаются 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
}
}
Кроме того, вы должны обернуть использование ObjectContext
с using
блоков.
В вашем методе «Form1_Load» вы создаете ПЕРВЫЙ экземпляр вашего контекста «FirebirdEntity» и заполняете ListViewItem объектами, выбранными из этого контекста
В вашем методе «button3_Click» вы создаете НОВЫЙ, ВТОРОЙ экземпляр вашего контекста «FirebirdEntity». Затем вы пытаетесь удалить объект в этом втором контексте, который был выбран в первом контексте.
Используйте один и тот же экземпляр вашего контекста в обоих ваших методах, и все будет работать нормально.
(В качестве альтернативы вы можете выбрать сущность, которую вы хотите удалить из вашего ВТОРОГО контекста, а затем удалить эту сущность вместо исходного)