在 ADO.NET Entity Framework 中使用存储过程

摘要

本文主要介绍在ADO.NET Entity Framework中使用存储过程来进行查询、插入、更新、删除操作。

建立示例数据库

数据库脚本:

 

ContractedBlock.gif ExpandedBlockStart.gif Code
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Group](
    
[GroupID] [int] IDENTITY(1,1NOT NULL,
    
[GroupName] [nvarchar](20NOT NULL,
 
CONSTRAINT [PK_Group] PRIMARY KEY CLUSTERED 
(
    
[GroupID] ASC
)
WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ONON [PRIMARY]
ON [PRIMARY]

GO


SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[User](
    
[UserID] [int] IDENTITY(1,1NOT NULL,
    
[UserName] [nvarchar](20NOT NULL,
    
[UserGroupID] [int] NOT NULL,
 
CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED 
(
    
[UserID] ASC
)
WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ONON [PRIMARY]
ON [PRIMARY]

GO

ALTER TABLE [dbo].[User]  WITH CHECK ADD  CONSTRAINT [FK_User_Group] FOREIGN KEY([UserGroupID])
REFERENCES [dbo].[Group] ([GroupID])
GO

ALTER TABLE [dbo].[User] CHECK CONSTRAINT [FK_User_Group]
GO

create procedure CreateUser
@username nvarchar(20),
@groupid int
as
begin
insert into [User] ([UserName] ,[UserGroupID] ) values(@username,@groupid)
end
go

create procedure DeleteUser
@userid int,
@groupid int
as
begin
delete from [User] where UserID=@userid
end
go

create procedure UpdateUser
@userid int,
@username nvarchar(20),
@groupid int
as
begin
update [User] set [UserName] =@username ,[UserGroupID] =@groupid where [UserID] =@userid 
end
go
create procedure GetUserInfo
@userid int
as
begin
select [UserID],[UserName],[UserGroupID] from [User] where [UserID] =@userid 
end
go

insert into [Group] ([GroupName] ) values('管理员')
insert into [Group] ([GroupName] ) values('注册用户')
insert into [Group] ([GroupName] ) values('游客')

它将建立2个有外键关系的数据表和4个存储过程,分别为查询、插入、更新、删除。

设置实体数据模型

在项目中加入一个ADO.NET Entity Data Model文件,选择从数据库生成模型,在选择数据库对象时要钩上表和存储过程,这样就完成了实体数据模型的生成。

但是如果此时你用ADO.NET Framework对数据进行CRUD操作并不会使用存储过程,我们需要将存储过程进行映射。查询和另外三项操作的映射方式不同,我们分开讨论。
先说查询存储过程的导入。在模型浏览器中右键点击函数导入,选择创建函数导入。

在弹出的对话框中设置选择一个用于查询的存储过程名称,设置以后用于调用该方法的函数名称,并设置该方法的返回类型。

点击确定完成设置,此时在模型浏览器的函数导入处会多了一个函数,以后即可通过该函数调用此存储过程进行数据查询。
接下来说插入、更新、删除存储过程的影射。
这三个存储过程需要同时映射到实体类上,也就是说如果你为一个实体类的插入方法映射了存储过程,那么更新和删除也必须映射存储过程。
我们的这3个存储过程都是对User表进行操作,所以选中UserInfo实体类,在映射详细信息的将实体映射到函数选项卡进行设置。

分别在选择插入/更新/删除函数的地方选择对应的存储过程名,然后设置属性的映射。一般的存储过程参数会自动设置好映射,但是外键列需要手动设置。
Delete存储过程中的groupid是一个没有用的参数,加上这个参数的原因是在插入和更新操作中都涉及到了2个实体类,如果删除函数中没有映射Group这个导航属性会报2048错误。
现在,CRUD的存储过程都已经映射好了。

调用存储过程

插入/更新/删除操作只需要像平时一样使用AddToUserInfos/更新实体类并SaveChanges/DeleteObject这些方法就可以了。查询需要显式调用。

1  Entities db  =   new  Entities();
2  UserInfo u  =  db.GetUserInfo(userid).FirstOrDefault();

 

Demo下载

点击下载

 

本文适用于 Microsoft .NET Framework 3.5 SP1

转载于:https://www.cnblogs.com/snowdream/archive/2008/12/06/use-stored-procedure-in-adonet-entity-framework.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值