使用entity framework执行存储过程
是否可以使用EF执行存储过程,使用内连接和左外连接从两个或多个表中选择数据库中的记录。
我的观点是避免在EF或LINQ中进行连接的方法,我有很多问题。
因此,如果我创建该过程,我可以使用来自用户输入的参数调用它,可以将结果分配给.ToList()
方法,然后将结果添加到asp:repeater .DataSource
。
我知道这可能是一个奇怪的问题,但我想首先出于多种原因这样做,因为我感觉更舒服。 第二,摆脱在EF中使用连接。 第三,我在某处读到,当用于经常调用查询时,使用存储过程将增强查询性能。
如果有人可以帮我用一个例子来回答这些问题,我将不胜感激。
您可以从Entity Framework数据上下文中调用SqlQuery
。
context.Database.SqlQuery("exec usp_StoredProcedure").ToList()
作为示例,您需要一个类来映射查询结果:
public class YourType { public string Property1 { get; set; } public string Property2 { get; set; } }
您还可以为查询指定参数,如下所示:
SqlParameter parameter1 = new SqlParameter("@Parameter1", "Value"); context.Database.SqlQuery("exec usp_StoredProcedure @Parameter1", parameter1).ToList()
我们将看到如何在Entity Framework中执行存储过程,在MVC中我们将看到如何添加EF。
在数据库中执行以下脚本以创建存储过程。
CREATE PROCEDURE FETCHEMPLOYEES AS BEGIN SELECT * FROM EMPTABLE END CREATE PROCEDURE FETCHEMPLOYEE(@ID INT) AS BEGIN SELECT * FROM EMPTABLE WHERE ID = @ID END public class EmpModel { EmployeeEntities empdb = new EmployeeEntities(); public List GetEmployees() { return empdb.FETCHEMPLOYEES().ToList(); } public EMPTABLE GetEmployee(int? id) { return empdb.FETCHEMPLOYEE(id).ToList().Single(); } } public class EmployeeController : Controller { Models.EmpModel mod = new Models.EmpModel(); public ActionResult Index() { List result = mod.GetEmployees(); return View(result); } public ActionResult Details(int id) { EMPTABLE result = mod.GetEmployee(id); return View(result); } }
有关更多分步详细信息,请参阅以下链接: http : //dotnetvisio.blogspot.in/2014/01/execute-stored-procedure-using-entity.html
你可以使用ObjectContext
类的ExecuteFunction
:
public virtual ObjectResult NameOfStoredProcedure(Nullable tableID) { var IDParameter = tableID.HasValue ? new ObjectParameter("tableID", tableID) : new ObjectParameter("tableID", typeof(int)); return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("NameOfStoredProcedureInSQLDatabase", IDParameter); }
在您使用MySQL的entity framework:
在此示例中,我的存储过程需要一个名为myParam的BIGINT参数
var myParam = new SqlParameter("@myParam", (MySqlDbType.Int64)).Value = 100; var res = _context.Database.SqlQuery($"call MyProcedureName({pyParam})");
请注意,我使用C#String Interpolation来构建我的查询字符串。