asp.net-mvc – 在ASP.NET MVC中执行原始SQL查询,数据库优先模式
我的项目模型是数据库优先,并使用远程访问另一台服务器上的数据库.
我需要使用原始SQL查询,因为我的查询非常复杂,我觉得在SQl而不是LINQ中感觉更舒服. 这是我的方式: string query = "select * from Inquiry_TBL where ..."; using (educationEntities db = new educationEntities()) { var list = db.Database.SqlQuery<Inquiry_TBL>(query); ViewData["total"] = list.Count(); } 问题是有时候我会在一秒钟内得到查询结果,有时它会长时间加载并给我一个错误,即当数据读取器关闭时“调用’读取’不是一个有效的操作.” 这是为什么?我的代码有问题,还是因为我正在使用远程访问另一台服务器?切换到本地服务器会解决问题吗? 解决方法
Entity Framework Code First 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(); } 欲了解更多信息,请查看Advanced Entity Framework 6 Scenarios for an MVC 5 Web Application (12 of 12).希望这有助于…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 在MVC Razor视图页面中使用string.Format
- asp.net – 如何在MVC 3中设置图表系列颜色?
- asp.net-mvc – 将ajax actionlink转换为引导按钮
- asp.net – 从_layout.cshtml将常量值传递给Angular
- asp.net-mvc-3 – 在动作过滤器中获取动作参数的值
- Asp:文本框与输入文本(PHP开发人员学习ASP)
- asp.net-mvc-3 – MVC3视图继承不可能?
- asp.netcore3.0 netstandard2.1 使用 DbProviderFactories
- asp.net – 重定向到一个页面,其endResponse为true VS Comp
- asp.net-mvc – 将复选框的值从View传递给Controller
- asp.net-core – .net核心自定义身份验证中的Use
- ide – 我如何处理必须编写经典ASP的代码?
- asp.net – Model-View-Presenter,View的界面属于
- asp.net – 在数据库中存储日期时间?
- 具有任意数量的键值对的ASP.NET路由 – 是否可能
- asp.net – 为什么当使用ADO.NET实体数据模型映射
- asp.net-mvc – 必需属性“pageBaseType”未找到
- asp.net-mvc – 弹出编辑模式下的多个列
- 在asp.net发送简讯到大约10000封电子邮件
- asp-classic – 与SQL Server Compact Edition 4