如何:指定存储过程以执行更新、插入和删除(O/R 设计器)
可以将存储过程添加到 O/R 设计器并作为典型的 DataContext 方法执行。 将更改从实体类保存到数据库时(例如在调用 SubmitChanges 方法时),还可以使用存储过程重写执行插入、更新和删除操作的默认 LINQ to SQL 运行时行为。
提示
如果存储过程的返回值需要发送回客户端(例如在存储过程中计算出的值),则在存储过程中创建输出参数。 如果无法使用输出参数,则编写分部方法实现,而不是依靠 O/R 设计器生成的重写。 在成功完成 INSERT 或 UPDATE 操作后,需要将映射到数据库生成的值的成员设置为相应的值。 有关更多信息,请参见开发人员在重写默认行为方面的责任 (LINQ to SQL)。
提示
LINQ to SQL 会自动为标识(自动递增)列、rowguidcol(数据库生成的 GUID)列和时间戳列处理数据库生成的值。 在其他列类型中,数据库生成的值将意外导致 Null 值。 若要返回数据库生成的值,应手动将 IsDbGenerated 设置为 true 并将 AutoSync 设置为下列值之一:Always、OnInsert 或 OnUpdate。
配置实体类的更新行为
默认情况下,在使用对 LINQ to SQL 实体类中的数据所做的更改来更新数据库(插入、更新和删除)时,更新逻辑是由 LINQ to SQL 运行时提供的。 该运行时创建默认的 Insert、Update 和 Delete 命令,这些命令基于表的架构(列和主键信息)。 当不需要默认行为时,可以通过分配特定的存储过程,以执行操作表中数据所必需的插入、更新和删除来配置更新行为。在不生成默认行为时(例如,实体类映射到视图时),也可以这样做。 最后,在数据库要求通过存储过程访问表时,您可以重写默认的更新行为。
提示
对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您所使用的 Visual Studio 版本和您所使用的设置。有关更多信息,请参见 Visual Studio 设置。
指定存储过程以重写实体类的默认行为
在设计器中打开**“LINQ to SQL”文件。 (在“解决方案资源管理器”**中双击 .dbml 文件。)
在**“服务器资源管理器”/“数据库资源管理器”中,展开“存储过程”**,找到要为实体类的 Insert、Update 和/或 Delete 命令使用的存储过程。
将该存储过程拖到 O/R 设计器上。
该存储过程将作为 DataContext 方法添加到方法窗格中。 有关更多信息,请参见 DataContext 方法(O/R 设计器)。
选择要使用存储过程对其执行更新的实体类。
在**“属性”窗口中选择要重写的命令(“Insert”、“Update”或“Delete”**)。
单击**“使用运行时”旁边的省略号 (...) 以打开“配置行为”**对话框。
选择**“自定义”**。
在**“自定义”**列表中选择所需的存储过程。
检查**“方法参数”和“类属性”列表以验证“方法参数”是否映射到相应的“类属性”**。 将 Update 和 Delete 命令的原始方法参数(Original_参数名称)映射到原始属性(属性名称(原始))。
提示
默认情况下,名称匹配时方法参数映射到类属性。 如果更改的属性名称在表和实体类之间不再匹配,而设计器无法确定正确的映射,您可能需要选择等效的类属性进行映射。
单击**“确定”或“应用”**。
提示
只要在每次更改后单击“应用”,就可以继续为每个类/行为组合配置行为。 如果在单击“应用”之前更改类或行为,则会出现一个警告对话框,以提供一个应用任何更改的机会。
若要恢复为使用默认运行时更新逻辑,请单击**“属性”窗口中 Insert、Update 或 Delete 命令旁边的省略号,然后在“配置行为”对话框中选择“使用运行时”**。
请参见
任务
演练:为 Northwind Customers 表创建更新存储过程