zoukankan      html  css  js  c++  java
  • EntityFramework 4/5/6 中执行自定义SQL语句

    参考:http://www.cnblogs.com/chengxiaohui/articles/2092001.html

    在EF4(.NET  4)中,我们有了全新的API:ObjectContext.ExecuteStoreCommand(...)和 ObjectContext.ExecuteStoreQuery<T>(...)。从函数名不难知道前者是为了执行某一并无返回集的SQL 命令,例如UPDATE,DELETE操作;后者是执行某一个查询,并可以将返回集转换为某一对象。

    今天小试一把,上代码 

                using (var db = new CentaStaffEntities())
                {
                    //查询 自定义实体
                    var presons = db.Database.SqlQuery<Person>("SELECT TOP 10 *  FROM [CentaStaff].[CentaStaff].[Staff] WITH(NOLOCK)");
                    Console.WriteLine(presons.FirstOrDefault().CnName);
                    Console.WriteLine(presons.Count());
    
    
                    //查询 EF生成的实体
                    var staffs = db.Database.SqlQuery<Staff>("SELECT TOP 10 *  FROM [CentaStaff].[CentaStaff].[Staff] WITH(NOLOCK)");
                    Console.WriteLine(staffs.FirstOrDefault().CnName);
                    Console.WriteLine(staffs.Count());
    
    
                    //多表查询 自定义实体  
                    var tables = db.Database.SqlQuery<Tables>("SELECT TOP 10 SA.[AwardID],S.[StaffID],S.[CnName]  FROM [CentaStaff].[CentaStaff].[Staff] S WITH(NOLOCK) INNER JOIN [CentaStaff].[CentaStaff].[StaffAward]  SA WITH(NOLOCK)  ON S.[StaffID]=SA.[StaffID]");
                    Console.WriteLine(tables.FirstOrDefault().CnName);
                    Console.WriteLine(tables.Count());
    
                    //修改和添加
                    //var execute = db.Database.ExecuteSqlCommand("UPDATE Person SET Name = 'Michael' WHERE PersonID = 1");
                    //if (execute > 0)
                    //{
                    //    Console.Write("execute success");
                    //}
    
                    //查询 参数传递
                    string sql = "SELECT TOP 10 *  FROM [CentaStaff].[CentaStaff].[Staff] WITH(NOLOCK) WHERE 1=1 ";
                    sql += " AND CnName=@CnName";
    
                    List<SqlParameter> sqlparameters = new List<SqlParameter>();
                    sqlparameters.Add(new SqlParameter("@CnName", "张三"));
    
    
                    var parameters = db.Database.SqlQuery<Staff>(sql, sqlparameters.ToArray());
                    Console.WriteLine(parameters.FirstOrDefault().CnName);
                    Console.WriteLine(parameters.Count());
                }
            //自定义实体类
            public class Person
            {
                public string CnName
                { get; set; }
                public string Gender
                { get; set; }
            }
            //多表查询
            public class Tables
            {
                public Guid AwardID
                { get; set; }
                public Guid StaffID
                { get; set; }
                public string CnName
                { get; set; }
            }


    在EF的项目,对于很耗性能的查询语句,采用SQL语句查询,会是一个比较好的选择。

  • 相关阅读:
    堆排序算法的原理和实现
    图的深度优先搜索(DFS)和广度优先搜索(BFS)算法
    图的迪杰斯特拉算法求最短路径
    第13章 切换到混合流并添加API访问
    第12章 添加对外部认证的支持
    第11章 使用OpenID Connect添加用户身份验证
    第10章 使用密码保护API
    第9章 使用客户端凭据保护API
    第8章 概述
    第7章 贡献
  • 原文地址:https://www.cnblogs.com/woxpp/p/5462265.html
Copyright © 2011-2022 走看看