代码之家  ›  专栏  ›  技术社区  ›  Inez

ADO.NET实体数据模型删除多行

  •  1
  • Inez  · 技术社区  · 15 年前

    我有以下数据库结构

    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 回复  |  直到 9 年前
        1
  •  4
  •   Misha N.    15 年前

    对于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 以旧时尚的方式做这件事。

    [更新:使用EF运行本机SQL]

    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();
           }
    

    您可能需要将此包装在“最后尝试”中,以确保在发生错误时关闭连接,并对连接状态进行附加检查。