zoukankan      html  css  js  c++  java
  • Entity Framework 批量删除

    1、使用 Entity FrameWork  删除数据,着实是一件比较头疼的数据,若是少量数据,可以使用以下方法删除

     using (DB.Entity.StudentDBEntities context = new DB.Entity.StudentDBEntities())
                {
                    foreach (var item in context.Students.Where(row => row.Isleft == true))
                    {
                        context.DeleteObject(item);
                    }
                    context.SaveChanges();
                }

    2、但是若是要删除的数据有个三五万,10万20万那该如何,若采用上述方法,保守估计也得10分钟吧,不信,你可以写个程序,打开SQL Server Profiler试一下,这时,若你不想另外配置连接字符串,可以借用EF的连接字符串,使用ADO.Net 完成批量删除功能

     .net Framework 3.5

    public static void DeleteObject(SqlBtmsModel context, string deleteString)

    {

        var bindingFlags = BindingFlags.Instance | BindingFlags.NonPublic;

        var factoryProperty = typeof(EntityConnection).GetProperty("StoreProviderFactory", bindingFlags);

        var factory = factoryProperty.GetValue(context.Connection, null) as DbProviderFactory;

        var connStr = (context.Connection as EntityConnection).StoreConnection.ConnectionString;

        using (var conn = factory.CreateConnection())

        {

            conn.ConnectionString = connStr;

            conn.Open();

            var cmd = factory.CreateCommand();

            cmd.Connection = conn;

            cmd.CommandText = deleteString;

            cmd.ExecuteNonQuery();

        }

    }

    Ø  .Net FrameWork 4.0

    当然,若是你使用的是  .Net FrameWork 4.0,那你可以使用以下 方式。


    using (DB.Entity.StudentDBEntities context = new DB.Entity.StudentDBEntities())
    {

    context.ExecuteStoreCommand("delete from Students where StudentId = @studentId", new SqlParameter("@studentId", 5));

    context.ExecuteStoreCommand("insert into students (StudentName)values (@p1)", new SqlParameter("@p1", "test"));

     }注:3.5不支持此方式。

    可能有人,想使用EntityCommand 进行批量删除,但是EntityCommand 仅支持 EntitySql ,问题就在这里了,EntitySql 目前不支持 Insert 、Delete 、Update操作,静等微软的下一步动作吧。

  • 相关阅读:
    在ASP.NET Core中怎么使用HttpContext.Current (转载)
    如何在.Net Core 2.0 App中读取appsettings.json
    ASP.NET CORE MVC 2.0 如何在Filter中使用依赖注入来读取AppSettings,及.NET Core控制台项目中读取AppSettings
    linux中shell变量$#,$@,$0,$1,$2的含义解释<转>
    ijkplayer阅读学习笔记之从代码上看播放流程
    ubuntu命令整理中
    Android SDK Android NDK Android Studio 官方下载地址<转>
    Ubuntu启动 卡在checking battery state 解决方案
    解决 ffmpeg 在avformat_find_stream_info执行时间太长
    ijkplayer阅读笔记系列<转>
  • 原文地址:https://www.cnblogs.com/xuesky/p/1857351.html
Copyright © 2011-2022 走看看