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