袁高亮,端木云,禁品乱欲品菊弄箫
原文链接:
当savechanges方法被调用的时候,ef 6 可以用来创建并使用增删改存储过程。
我们来为下面的student实体,创建增删改存储过程。
class student { public int studentid { get; set; } public string studentname { get; set; } public datetime dob { get; set; } }
使用maptostoredprocedures()方法,为实体配置默认的存储过程。
public class schoolcontext: dbcontext { protected override void onmodelcreating(dbmodelbuilder modelbuilder) { modelbuilder.entity<student>() .maptostoredprocedures(); } public dbset<student> students { get; set; } }
ef api将会为student实体创建student_insert
, student_update
和student_delete存储过程。
student_insert和student_update存储过程包含student实体的所有属性的参数,student_delete存储过程仅仅包含student的主键属性studentid一个参数:
create procedure [dbo].[student_insert] @studentname [nvarchar](max), @dob [datetime] as begin insert [dbo].[students]([studentname], [dob]) values (@studentname, @dob) declare @studentid int select @studentid = [studentid] from [dbo].[students] where @@rowcount > 0 and [studentid] = scope_identity() select t0.[studentid] from [dbo].[students] as t0 where @@rowcount > 0 and t0.[studentid] = @studentid end create procedure [dbo].[student_update] @studentid [int], @studentname [nvarchar](max), @dob [datetime] as begin update [dbo].[students] set [studentname] = @studentname, [dob] = @dob where ([studentid] = @studentid) end create procedure [dbo].[student_delete] @studentid [int] as begin delete [dbo].[students] where ([studentid] = @studentid) end
为实体映射自定义的存储过程
ef6允许你使用自己的存储过程,你可以像下面这样进行配置,下面的代码为student实体,映射了一个自定义的存储过程。
protected override void onmodelcreating(dbmodelbuilder modelbuilder) { modelbuilder.entity<student>() .maptostoredprocedures(p => p.insert(sp => sp.hasname("sp_insertstudent").parameter(pm => pm.studentname, "name").result(rs => rs.studentid, "id")) .update(sp => sp.hasname("sp_updatestudent").parameter(pm => pm.studentname, "name")) .delete(sp => sp.hasname("sp_deletestudent").parameter(pm => pm.studentid, "id")) ); }
在上面的例子中,student实体映射了三个存储过程,sp_insertstudent、sp_updatestudent、以及sp_deletestudent.当然同样对存储过程的参数进行了配置。
为所有实体配置存储过程
你可以使用下面的代码,为所有实体配置存储过程。
protected override void onmodelcreating(dbmodelbuilder modelbuilder) { modelbuilder.types().configure(t => t.maptostoredprocedures()); }
局限性
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Blazor server side 自家的一些开源的, 实用型项目的进度之 CEF客户端
.NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
vue+.netcore可支持业务代码扩展的开发框架 VOL.Vue 2.0版本发布
网友评论