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操作,静等微软的下一步动作吧。

  • 相关阅读:
    利用SCI做的一个足球答题系统
    《Play for Java》学习笔记(四)Controller
    《Learning Play! Framework 2》学习笔记——案例研究1(Templating System)
    《Play for Java》学习笔记(三)template+Message
    CSS垂直居中对齐
    Metro UI(Win 8风格)页面设计小记
    Play Framework介绍:主要概念(转)
    《Play for Java》学习笔记(二)基本的CRUD应用
    《Play for Java》学习笔记(一)项目框架
    复杂产品的响应式设计【流程篇】 (转)
  • 原文地址:https://www.cnblogs.com/xuesky/p/1857351.html
Copyright © 2011-2022 走看看