參考:http://www.cnblogs.com/chengxiaohui/articles/2092001.html 在EF4(.NET 4)中,我們有了全新的API:ObjectContext.ExecuteStoreCommand(...)和 ObjectContext.ExecuteSto ...
參考: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語句查詢,會是一個比較好的選擇。