实体框架 6 中将插入、更新和删除函数映射到存储过程






4.44/5 (22投票s)
实体框架 6 中将插入、更新和删除函数映射到存储过程
引言
众所周知,在考虑性能时,存储过程始终优于独立查询。因此,我们将使用 ADO.NET 实体数据模型设计器将实体类型的 `insert`、`update` 和 `delete` 操作映射到存储过程。正如我们所知,每个实体类型 EDM 在 `insert`、`update` 和 `delete` 操作上的默认行为是执行自动生成的查询。
观察
假设我们在数据库 `MyOrg` 中有一个名为 `Department` 的表,并将其添加到名为 `ModificationFunctions` 的控制台应用程序中的 EDM *MyOrg.edmx* 中。
表中的数据是
现在让我们执行 `Insert`、`Update` 和 `Delete` 操作,并观察默认行为。
namespace ModificationFunctions
{
class Program
{
static void Main(string[] args)
{
using (MyOrgEntities OE = new MyOrgEntities())
{
//Insert Operation
OE.Departments.Add(new Department() { DName = "Production", HOD = "Zing", Gender = "M" });
OE.SaveChanges();
//Update Opertation
var dept = OE.Departments.Where(x => x.Did == 1003).FirstOrDefault();
dept.HOD = "Martin";
OE.SaveChanges();
//Delete Operation
var dept1 = OE.Departments.Where(x => x.Did == 1013).FirstOrDefault();
OE.Departments.Remove(dept1);
OE.SaveChanges();
}
}
}
}
为了观察默认行为,我将使用 IntelliTrace 窗口。
自动生成的插入查询
自动生成的更新查询
自动生成的删除查询
实现
步骤 1
现在让我们尝试通过用用户定义的存储过程替换所有这些查询来更改此默认行为,即:
Create Proc InsertDepartment
(@DName as Varchar(50), @HOD as varchar(50), @Gender as Varchar(50))
as
INSERT INTO Department (DName,HOD,Gender) VALUES (@DName,@HOD,@Gender)
Create Proc UpdateDepartment
(@DName as Varchar(50), @HOD as varchar(50), @Gender as Varchar(50),@Did as int)
as
Update Department Set DName=@DName,HOD=@HOD,Gender=@Gender where Did=@Did
Create Proc DeleteDepartment
(@Did as int)
as
Delete from Department where Did=@Did
第二步
现在转到 *MyOrg.edmx* 设计器表面,右键单击并选择从数据库更新模型,然后从存储过程和函数中选择所有这 3 个存储过程,并确保取消选中“将选定的存储过程和函数导入到实体模型”选项,然后单击“完成”按钮。如下所示
步骤 3
现在右键单击实体类型 `Department` 以映射 `insert`、`update` 和 `delete` 操作,并选择存储过程映射。映射详细信息窗口的“将实体映射到函数”视图将出现,如下所示
步骤 4
从下拉列表中,选择要将 `insert`、`update` 和 `delete` 操作映射到的存储过程。窗口将填充实体属性和存储过程参数之间的默认映射,如下所示,并保存 * .edmx* 文件。
现在让我们使用 IntelliTrace 窗口检查相同的 `insert`、`update` 和 `delete` 操作,现在它应该使用导入的存储过程进行 `insert`、`update` 和 `delete` 操作,而不是默认查询。
Insert
更新
删除
感谢阅读!