65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.44/5 (22投票s)

2014年10月16日

CPOL

2分钟阅读

viewsIcon

52038

实体框架 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

更新

删除

感谢阅读!

© . All rights reserved.