演练:使用存储过程更新记录
在一个 SQL Server 数据库中可以调用存储过程直接从 LightSwitch,但是,您可以创建 windows communication foundation (WCF) 富 Internet 应用 (RIA) 程序服务显示存储过程然后从访问您的 LightSwitch app 的服务。通过使用存储过程和 WCF RIA 服务,本演练演示如何插入、更新和删除客户记录。LightSwitch app。
许多数据库管理员不允许直接访问表,而是显示只读视图和存储过程提供对插入、更新和删除记录。LightSwitch 不识别存储过程,因此依赖于存储过程更新记录可能初看上去象是不可用的任何数据库。如果完成有点额外工作,可以确实使用从 LightSwitch的这些数据库。
系统必备
本演练使用从 LightSwitch 指导教程 准则的 Northwind 数据库。有关更多信息,请参见安装 Northwind 示例数据库。
创建存储过程
在许多情况下,您将在数据库中已有的访问存储过程。Northwind 数据库没有必要的存储过程插入,不更新,但不会删除客户记录,因此,您必须添加它们。
添加存储过程
在菜单栏上,依次选择 查看,SQL Server 对象资源管理器。
在 SQL Server 对象资源管理器 窗口中,展开 罗斯文 数据库节点,然后选择 可编程性。
外接 可编程性 节点,然后选择 存储过程。
打开 存储过程的快捷菜单,然后选择 添加新存储过程。
在 代码编辑器,用以下 Transact-SQL 代码替换内容,然后选择 更新 按钮。
CREATE Procedure [dbo].[InsertCustomer] @CustomerID nchar(5), @CompanyName nvarchar(40), @ContactName nvarchar(30), @ContactTitle nvarchar(30), @Address nvarchar(60), @City nvarchar(15), @Region nvarchar(15), @PostalCode nvarchar(10), @Country nvarchar(15), @Phone nvarchar(24), @Fax nvarchar(24) AS INSERT INTO [dbo].[Customers] ([CustomerID] ,[CompanyName] ,[ContactName] ,[ContactTitle] ,[Address] ,[City] ,[Region] ,[PostalCode] ,[Country] ,[Phone] ,[Fax]) VALUES (@CustomerID ,@CompanyName ,@ContactName ,@ContactTitle ,@Address ,@City ,@Region ,@PostalCode ,@Country ,@Phone ,@Fax)
在 预览数据库更新 对话框中,选择 更新数据库 按钮。
InsertCustomer 存储过程将添加到数据库。
打开 存储过程的快捷菜单,然后选择 添加新存储过程。
在 代码编辑器,用以下 Transact-SQL 代码替换内容,然后选择 更新 按钮。
CREATE PROCEDURE [dbo].[UpdateCustomer] @CustomerID nchar(5), @CompanyName nvarchar(40), @ContactName nvarchar(30), @ContactTitle nvarchar(30), @Address nvarchar(60), @City nvarchar(15), @Region nvarchar(15), @PostalCode nvarchar(10), @Country nvarchar(15), @Phone nvarchar(24), @Fax nvarchar(24) AS UPDATE [dbo].[Customers] SET [CompanyName] = @CompanyName ,[ContactName] = @ContactName ,[ContactTitle] = @ContactTitle ,[Address] = @Address ,[City] = @City ,[Region] = @Region ,[PostalCode] = @PostalCode ,[Country] = @Country ,[Phone] = @Phone ,[Fax] = @Fax WHERE CustomerID=@CustomerID
在 预览数据库更新 对话框中,选择 更新数据库 按钮。
UpdateCustomer 存储过程将添加到数据库。
打开 存储过程的快捷菜单,然后选择 添加新存储过程。
在 代码编辑器,用以下 Transact-SQL 代码替换内容,然后选择 更新 按钮。
CREATE PROCEDURE [dbo].[DeleteCustomer] @CustomerID nchar(5) AS DELETE FROM [dbo].[Customers] WHERE CustomerID=@CustomerID
在 预览数据库更新 对话框中,选择 更新数据库 按钮。
DeleteCustomer 存储过程将添加到数据库。
创建实体数据模型
下一步是创建将插入、更新和删除记录通过使用存储过程将添加的 entity framework 数据模型。
创建数据模型
在菜单栏上,选择**“文件”,“新建**、“项目”。
在 新建项目 对话框中,展开 Visual Basic 或 Visual C# 节点,然后选择 类库 模板。
在 名称 文本框中,输入 NorthwindService,然后选择 确定 按钮。
在 解决方案资源管理器,打开 MyProject 节点的快捷菜单,然后选择 打开。
在 目标框架 列表中,选择 .NET Framework 4。
在 解决方案资源管理器,打开 NorthwindService的快捷菜单,选择 添加,然后选择 新建项。
在 添加新项 对话框中,选择 ADO.NET 实体数据模型 模板。
在 名称 文本框中,输入 Northwind.edmx,然后选择 添加 按钮。
在 实体数据模型向导,选择 从数据库生成 图标,然后选择 下一个 按钮。
在 选择您的数据连接 页上,选择 新建连接 按钮。
在 连接属性 对话框中,在 服务器名称 文本框中,输入安装 Northwind 数据库服务器的名称。
J# 说明 可以找到在 SQL Server 对象资源管理器的名称。
在 选择或输入一个数据库名 文本框中,输入 罗斯文。
选择 确定 按钮,然后选择 下一个 按钮。
在 选择您的数据库对象和设置 页上,展开 表 节点,然后选择 客户 复选框。
外接 存储过程和函数 节点,选择 DeleteCustomer、InsertCustomer和 UpdateCustomer 复选框,然后选择 完成 按钮。
实体模型生成,因此,Northwind.edmx 数据库关系图即。
说明 如果 安全警告 出现对话框,请选择 确定 按钮运行模板。
打开 客户 实体的快捷菜单,然后选择 存储过程映射。
在 映射详细信息 窗口中,在 <Select Insert Function> 列表中,选择 InsertCustomer。
在 <Select Update Function> 列表中,选择 UpdateCustomer。
在 <Select Delete Function> 列表中,选择 DeleteCustomer。
关闭 Northwind.edmx 设计器。
在 解决方案资源管理器,选择 显示所有文件 工具栏按钮。
外接 Northwind.edmx的节点,然后删除 Northwind.tt 和 Northwind.Context.tt 文件。
打开 Northwind.edmx 文件,并显示空白在 客户 外部实体。
在 属性 窗口中,更改 代码生成策略 属性的值更改为 默认。
在菜单栏上,依次选择 生成,生成 NorthwindService。
您现在具有使用您的存储过程,将插入、更新和删除记录的一个 entity framework 数据模型。
创建一个 WCF RIA 服务
如果您创建一个 WCF RIA 服务,则您的 LightSwitch app 可以使用 entity framework 数据模型用作数据源。
创建服务
在 解决方案资源管理器,打开 NorthwindService 项目的快捷菜单,选择 添加,然后选择 新建项。
在 添加新项 对话框中,选择 域服务类 模板。
在 名称 文本框中,输入 NorthwindService,然后选择 添加 按钮。
在 添加新的域服务选件类 对话框中,选择 确定 按钮。
在 解决方案资源管理器,打开 Northwind 服务的快捷菜单,然后选择 添加引用。
选择 扩展 节点,选择 System.ServiceModel.DomainServices.EntityFramework 复选框,然后选择 确定 按钮。
将以下代码添加到 NorthwindService 选件类:
Imports System.ServiceModel.DomainServices.EntityFramework Public Class NorthwindService Inherits LinqToEntitiesDomainService(Of NorthwindEntities) <Query(IsDefault:=True)> Public Function GetCustomers() As IQueryable(Of Customer) Return Me.ObjectContext.Customers End Function Public Sub InsertCustomer(ByVal customer As Customer) If ((customer.EntityState = EntityState.Detached) = False) Then Me.ObjectContext.ObjectStateManager. ChangeObjectState(customer, EntityState.Added) Else Me.ObjectContext.Customers.AddObject(customer) End If End Sub Public Sub UpdateCustomer(ByVal currentCustomer As Customer) Me.ObjectContext.Customers.AttachAsModified(currentCustomer, Me.ChangeSet.GetOriginal(currentCustomer)) End Sub Public Sub DeleteCustomer(ByVal customer As Customer) If ((customer.EntityState = EntityState.Detached) = False) Then Me.ObjectContext.ObjectStateManager. ChangeObjectState(customer, EntityState.Deleted) Else Me.ObjectContext.Customers.Attach(customer) Me.ObjectContext.Customers.DeleteObject(customer) End If End Sub End Class
namespace NorthwindService { public class NorthwindService : LinqToEntitiesDomainService<NorthwindEntities> { [Query(IsDefault = true)] public IQueryable<Customer> GetCustomers() { return this.ObjectContext.Customers; } public void InsertCustomer(Customer customer) { if ((customer.EntityState != EntityState.Detached)) { this.ObjectContext.ObjectStateManager. ChangeObjectState(customer, EntityState.Added); } else { this.ObjectContext.Customers.AddObject(customer); } } public void UpdateCustomer(Customer currentCustomer) { this.ObjectContext.Customers.AttachAsModified(currentCustomer, this.ChangeSet.GetOriginal(currentCustomer)); } public void DeleteCustomer(Customer customer) { if ((customer.EntityState != EntityState.Detached)) { this.ObjectContext.ObjectStateManager. ChangeObjectState(customer, EntityState.Deleted); } else { this.ObjectContext.Customers.Attach(customer); this.ObjectContext.Customers.DeleteObject(customer); } } } }
在菜单栏上,依次选择 生成,生成 NorthwindService。
在菜单栏上,依次选择 文件,全部保存。
创建 LightSwitch App
最后一步是创建将使用 WCF RIA 服务您创建的 LightSwitch app。
创建应用程序
在菜单栏上,选择**“文件”,“新建**、“项目”。
在 新建项目 对话框中,选择 LightSwitch 类别,然后选择 LightSwitch 应用程序 (Visual Basic) 或 LightSwitch 应用程序 (Visual C#) 项目模板。
在 名称 文本框中,输入 罗斯文,然后选择 确定 按钮。
在菜单栏上,依次选择 文件,添加,现有项目。
选择 NorthwindService 项目,然后选择 打开。
在 解决方案资源管理器,在 罗斯文 项目中,打开 数据源 节点的快捷菜单,然后选择 添加数据源。
在 连接数据源向导,选择 WCF RIA 服务 图标。
选择 下一个 按钮,然后选择 添加引用 按钮。
在 引用管理器 对话框中,选择 浏览 按钮。
在 Bin\Release 您的 NorthWindService 项目的文件夹,选择 NorthwindService.dll 文件,然后选择 添加 按钮。
选择 确定 按钮关闭对话框,然后选择 下一个 按钮。
在 选择数据源对象 页上,选择 实体 复选框,然后选择 完成 按钮。
在 解决方案资源管理器,在 NorthwindService 项目中,打开 App.Config 文件。
在 ConnectionStrings 部分中,将 <add name’”NorthwindEntities”启动的连接字符串。
在 解决方案资源管理器,选择 罗斯文 项目,请从工具栏上的列表然后选择 文件视图。
外接 服务器 节点,然后选择 Web.config。
在 ConnectionStrings 部分,粘贴所复制的连接字符串。
您现在具有使用存储过程,可以插入、更新和删除记录的完整正常工作的数据源。
后续步骤
通过使用存储过程,您可以创建自己的 LightSwitch 屏幕和业务逻辑照常和快捷方便地组成正常运行的应用程序。