我在MVC框架中使用Entity Framework和存储过程,有没有关于使用存储过程的好的教程?
考虑到我的存储过程非常复杂(一些超过了1000行),在这种情况下是否最好使用Enterprise Library?
注意:我使用存储过程是因为它们非常复杂。
我在MVC框架中使用Entity Framework和存储过程,有没有关于使用存储过程的好的教程?
考虑到我的存储过程非常复杂(一些超过了1000行),在这种情况下是否最好使用Enterprise Library?
注意:我使用存储过程是因为它们非常复杂。
MVC在这种情况下绝对不相关。从EF调用存储过程的方式仍然相同。我猜你想使用存储过程,但实际上并不使用实体和LINQ-to-Entities(主要的EF特性),是吗?通常你需要:
ObjectContext
和所有实体。ObjectContext
上创建方法,该方法将允许您像调用任何其他 .net 方法一样调用存储过程。您甚至不必使用函数导入,可以通过调用以下方式直接执行过程:
objectContext.ExecuteSqlCommand("storedProcedureName", SqlParameters)
用于不返回记录集的SPobjectContext.ExecuteStoreQuery<ResultType>("storedProcedureName", SqlParameters)
用于返回记录集的SP。 ResultType
必须具有与结果集中列相同的属性名称。它仅适用于平面类型(没有嵌套对象)。当使用存储过程时,存在一些限制:
var startDateTY = masterSales.PolicyStartDate;
var endateTY = masterSales.PolicyEndDate;
var startDatePY = masterSales.PolicyStartDate.Value.AddYears(-1);
var endatePY = masterSales.PolicyEndDate.Value.AddYears(-1);
var spParameters = new object[4];
spParameters[0] = new SqlParameter()
{
ParameterName = "startDateTY",
Value = startDateTY
};
spParameters[1] = new SqlParameter()
{
ParameterName = "endateTY",
Value = endateTY
};
spParameters[2] = new SqlParameter()
{
ParameterName = "startDatePY",
Value = startDatePY
};
spParameters[3] = new SqlParameter()
{
ParameterName = "endatePY",
Value = endatePY
};
var datalist = objContext.Database.SqlQuery<vMasterSalesAgentReport>("dbo.usp_GetSalesAgentReport @startDateTY,@endateTY,@startDatePY,@endatePY", spParameters).ToList();
store = "sp_selectmark @regid='" + id + "'";
var st = db.ExecuteStoreQuery<Sp>("exec " + store).ToList();
GridView1.DataSource = st;
GridView1.DataBind();
string store = "";
store = "sp_inserttbreg @name='" + regobj.name + "',@age='" + regobj.age + "',@place='" + regobj.place + "',@gender='" + regobj.gender + "',@email='" + regobj.email + "',@fon='" + regobj.fon + "'";
dbContext.Database.SqlQuery
或dbContext.Database.ExecuteSqlCommand
执行存储过程。 - Ladislav Mrnka