使用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:

在此示例中,我的存储过程需要一个名为myParamBIGINT参数

 var myParam = new SqlParameter("@myParam", (MySqlDbType.Int64)).Value = 100; var res = _context.Database.SqlQuery($"call MyProcedureName({pyParam})"); 

请注意,我使用C#String Interpolation来构建我的查询字符串。