實體框架代碼第一API包括使您能夠將SQL命令直接傳遞到數據庫的方法。您有以下選項:
•對返回實體類型的查詢使用DbSet.SqlQuery方法。返回的對象必須是DbSet對象所需的類型,除非您關閉跟蹤,否則它們會自動由數據庫上下文跟蹤。 (請參閱以下有關AsNoTracking方法的部分。)
•對於返回非實體類型的查詢,請使用Database.SqlQuery方法。即使使用此方法檢索實體類型,數據庫上下文也不會跟蹤返回的數據。
•對非查詢命令使用Database.ExecuteSqlCommand。
調用返回實體的查詢:
public async Task<ActionResult> Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
// Commenting out original code to show how to use a raw SQL query.
//Department department = await db.Departments.FindAsync(id);
// Create and execute raw SQL query.
string query = "SELECT * FROM Department WHERE DepartmentID = @p0";
Department department = await db.Departments.SqlQuery(query, id).SingleOrDefaultAsync();
if (department == null)
{
return HttpNotFound();
}
return View(department);
}
調用返回對象的其他類型的查詢:
public ActionResult About()
{
//Commenting out LINQ to show how to do the same thing in SQL.
//IQueryable<EnrollmentDateGroup> = from student in db.Students
// group student by student.EnrollmentDate into dateGroup
// select new EnrollmentDateGroup()
// {
// EnrollmentDate = dateGroup.Key,
// StudentCount = dateGroup.Count()
// };
// SQL version of the above LINQ code.
string query = "SELECT EnrollmentDate, COUNT(*) AS StudentCount "
+ "FROM Person "
+ "WHERE Discriminator = 'Student' "
+ "GROUP BY EnrollmentDate";
IEnumerable<EnrollmentDateGroup> data = db.Database.SqlQuery<EnrollmentDateGroup>(query);
return View(data.ToList());
}
調用更新查詢:
[HttpPost]
public ActionResult UpdateCourseCredits(int? credit)
{
if (credit != null)
{
ViewBag.RowsAffected = db.Database.ExecuteSqlCommand(
"UPDATE Course SET Credits = Credits * {0}", credit);
}
return View();
}
如需更多e信息請看Advanced Entity Framework 6 Scenarios for an MVC 5 Web Application (12 of 12)。希望這有助於...
告訴我們SQL是什麼,我們可以提供Linq或Lambda以及解釋。 – BlackICE
查詢每次調用時都是一樣的,還是在where子句中有所不同?我將運行SQL Profiler來查看服務器上正在運行的內容。從那裏您可以將查詢粘貼到SSMS中,並在啓用顯示執行計劃的情況下運行查詢並診斷返回的內容。如果缺少指標,執行計劃也應該顯示。 – BlackICE
我切換回本地服務器,它工作正常。謝謝。現在我的問題是我的SQL查詢是這樣的:「select * from Table_A inner join Table_B ...」,這意味着我將從兩個表中得到數據的返回,然後將這些數據返回給視圖。但執行sql查詢:「db.Database.SqlQuery(查詢)」只能從表「Table_A」返回數據。如果我需要「Table_A」和「Table_B」的數據,該怎麼辦? –
user2093360