Модель данных сущности ADO.NET, удаляющая много строк - PullRequest
1 голос
/ 13 ноября 2009

У меня следующая структура базы данных

CREATE TABLE IF NOT EXISTS `klienci` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nazwa` varchar(50) NOT NULL,
  `miejscowosc` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `klienci_do_trasy` (
  `klient_id` int(11) NOT NULL,
  `trasa_id` int(11) NOT NULL,
  `seq` int(11) NOT NULL,
  PRIMARY KEY (`klient_id`,`trasa_id`),
  KEY `trasa_id` (`trasa_id`),
  KEY `klient_id` (`klient_id`,`trasa_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `trasy` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nazwa` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

ALTER TABLE `klienci_do_trasy`
  ADD CONSTRAINT `klienci_do_trasy_ibfk_5` FOREIGN KEY (`klient_id`) REFERENCES `klienci` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  ADD CONSTRAINT `klienci_do_trasy_ibfk_6` FOREIGN KEY (`trasa_id`) REFERENCES `trasy` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION;

И я хотел бы выполнить запрос, подобный:

DELETE FROM klienci_do_trasy WHERE klient_id = 1;

Не знаю, как сделать это с сущностью ADO.NET

1 Ответ

4 голосов
/ 13 ноября 2009

С EntityFramework v1.0 такой возможности нет. Вам придется вызывать ObjectContext.DeleteObject для каждой сущности:

 using (TheDataContext entities = new TheDataContext())
  {
        List<Klienci_do_tracy> kdcList = //get entities to delete
        foreach(Klienci_do_tracy kdc in kdcList)
        {
             entities.DeleteObject(kdc);
        }
        entities.SaveChanges();
  }

или вы можете использовать EntityCommand , чтобы сделать это по старинке.

[обновление: запустить собственный sql с EF]

var eConnection = (System.Data.EntityClient.EntityConnection)yourContextInstance.Connection;

DbConnection conn = eConnection.StoreConnection;

 if (conn.State != ConnectionState.Open)
      conn.Open();  
 using (DbCommand cmd = conn.CreateCommand())
       {
        //write native sql query
        cmd.CommandText = "delete from...where...";
        cmd.ExecuteNonQuery();
       }

Вероятно, вам придется заключить это в конец, чтобы гарантировать закрытие соединения, если что-то пойдет не так, и дополнительные проверки состояния соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...