惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MongoDB | Blog
MongoDB | Blog
大猫的无限游戏
大猫的无限游戏
H
Help Net Security
V
Visual Studio Blog
G
Google Developers Blog
Blog — PlanetScale
Blog — PlanetScale
Last Week in AI
Last Week in AI
C
Check Point Blog
D
Docker
M
MIT News - Artificial intelligence
P
Proofpoint News Feed
博客园 - 叶小钗
博客园 - 聂微东
The Cloudflare Blog
云风的 BLOG
云风的 BLOG
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
酷 壳 – CoolShell
酷 壳 – CoolShell
MyScale Blog
MyScale Blog
WordPress大学
WordPress大学
Engineering at Meta
Engineering at Meta
腾讯CDC
S
SegmentFault 最新的问题
博客园 - 【当耐特】

博客园 - 风的传说

使用Entity Framework时要注意的一些性能问题 UML类图 软件项目的需求分析 MVC Models定义验证属性 增加asp.net应用程序性能的19种方法 - 风的传说 - 博客园 entity framework进行一对多的联合查询 WPF 事件快速参考 [导入]非常不错的WCF入门文章,来自Artech [导入]Microsoft Expression Studio 2 简体中文正式版 [导入]C#开源持久层框架 [导入]Sql Server2005简单分页 [导入]提高C#编程水平的50个要点 [导入]New ASP.NET Charting Control: <asp:chart runat="server"/> [导入]asp.net 里的HttpHandler隐藏图片 [导入]c# oop思想 [导入]Pro ASP.NET 3.5 in C# 2008 [导入].Net3.5扩展方法实现对象JSON序列化 [导入]26句实用的英语 [导入]微软将 jQuery IntelliSense整合到Visual Studio [导入]08年最流行的十大SaaS术语 [导入]asp.net(c#)怎样将图片存入数据库? [导入]linq与xml
Entity Framework 批量删除
风的传说 · 2010-10-21 · via 博客园 - 风的传说

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