如何:将修改函数映射到存储过程(实体数据模型工具)
本主题介绍如何使用 ADO.NET 实体数据模型设计器(实体设计器)将实体类型的插入、更新和删除操作映射到存储过程。
实体框架生成一个从 ObjectContext 派生的类,该类表示概念模型中的实体容器。 (该派生类的名称即是概念模型文件中的EntityContainer 的名称。)该类公开 SaveChanges 方法,该方法触发对基础数据库的更新。 这些更新操作可以使用系统自动生成的 SQL 语句(默认),也可以使用开发人员所指定的存储过程。 无论是否使用存储过程来更新数据库,用于创建、更新和删除实体的应用程序代码都是一样的。
注意: |
---|
如果没有将实体类型的插入、更新或删除这三种操作全部映射到存储过程,则在运行时执行的情况下未映射的操作将失败且会引发 UpdateException。 |
下面的过程假定您已在实体设计器中打开一个 .edmx 文件。
将插入操作映射到存储过程
将插入操作映射到存储过程
在实体设计器图面上或在“模型浏览器”窗口中,右击要映射插入操作的实体类型,然后选择**“存储过程映射”**。
此时将出现**“映射详细信息”窗口的“将实体映射到函数”**视图。
单击**“<选择插入函数>”**。
在下拉列表中选择插入操作要映射到的存储过程。
窗口中填充的是实体属性与存储过程参数之间的默认映射。
通过单击相应属性字段并从下拉列表中选择适当属性,修改每个存储过程参数对应的映射。
注意: 所有实体键都必须具有映射。如果存储过程使用 INSERT 语句,则实体键通常映射到插入新行时创建的主键。下面几个步骤介绍如何将存储过程返回的数据映射到实体属性。 单击**“<添加结果绑定>”**。
该字段即变为可编辑状态。
键入包含存储过程返回的数据的参数名称。
单击对应于参数名称的属性字段。
该字段将变成一个下拉属性列表。
选择返回的数据要映射到的属性。
注意: 对于整数值输出参数,“受影响的行数参数”复选框处于启用状态。如果在调用插入操作时针对某参数选中该复选框且返回的值为零,将引发 OptimisticConcurrencyException。 对每个返回值和未映射属性重复步骤 5 到 8。
现在,所选实体类型的插入操作已映射到存储过程。
将更新操作映射到存储过程
将更新操作映射到存储过程
在实体设计器图面上或在“模型浏览器”窗口中,右击要映射插入操作的实体类型,然后选择**“存储过程映射”**。
此时将出现**“映射详细信息”窗口的“将实体映射到函数”**视图。
单击**“<选择更新函数>”**。
在下拉列表中选择更新操作要映射到的存储过程。
窗口中填充的是实体属性与存储过程参数之间的默认映射。
通过单击相应属性字段并从下拉列表中选择适当属性,修改每个存储过程参数对应的映射。
对于每个属性,都可以选中在**“使用原始值”[Use Original Value]**列中的复选框。
通过**“使用原始值”[Use Original Value]选项,可以使用并发控制。 如果选中某个属性的“使用原始值”[Use Original Value]**选项,则从数据库读取的该属性的值将传递给指定的存储过程参数。 请注意,属性的原始值和当前值都可以传递给不同的参数。
注意: 映射更新操作时,可以将存储过程返回的数据映射到实体属性。下面几个步骤介绍如何将存储过程返回的数据映射到实体属性。 单击**“<添加结果绑定>”**。
该字段即变为可编辑状态。
键入包含存储过程返回的数据的参数名称。
单击对应于参数名称的属性字段。
在下拉列表中选择返回的数据要映射到的属性。
注意: 对于整数值输出参数,“受影响的行数参数”复选框处于启用状态。如果在调用更新操作时针对某参数选中该复选框且返回的值为零,将引发 OptimisticConcurrencyException。 可以选择对每个返回值重复步骤 6 到 9。
现在,所选实体类型的更新操作已映射到存储过程。
将删除操作映射到存储过程
将删除操作映射到存储过程
在实体设计器图面上或在“模型浏览器”窗口中,右击要映射插入操作的实体类型,然后选择**“存储过程映射”**。
此时将出现**“映射详细信息”窗口的“将实体映射到函数”**视图。
单击**“<选择删除函数>”**。
在下拉列表中选择删除操作要映射到的存储过程。
窗口中填充的是实体属性与存储过程参数之间的默认映射。
通过单击相应属性字段并从下拉列表中选择适当属性,修改每个存储过程参数对应的映射。
注意: 必须将关联映射到存储过程参数。在属性下拉列表中,可以选择关联。
注意: |
---|
对于整数值输出参数,“受影响的行数参数”复选框处于启用状态。如果在调用删除操作时针对某参数选中该复选框且返回的值为零,则将引发 OptimisticConcurrencyException。 |