我需要使用带有Fluent API映射的EF Code First从存储过程中检索SQL序列的值。
我的存储过程:
CREATE PROCEDURE [Security].[GetHashSaltSequence]
AS
DECLARE @Sequence AS INT = NULL;
SELECT @Sequence = NEXT VALUE FOR SequenceName;
RETURN @Sequence;
如何使用流利的API在我的DbContext中映射此过程?
PS:不使用T-SQL,如
dbContext.MyEntity.SqlQuery("dbo.StoredProcedureName @myParam", myParam);
我不认为还有其他方法可以做到这一点。只有CURD操作映射可以做到。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<EmployeeMaster>()
.MapToStoredProcedures(s => s.Insert(u => u.HasName("InsertEmployee", "dbo"))
.Update(u => u.HasName("UpdateEmployee", "dbo"))
.Delete(u => u.HasName("DeleteEmployee", "dbo"))
);
}
查看以下链接,希望这将对您的有所帮助
https://msdn.microsoft.com/en-us/data/dn468673.aspx
http://www.c-sharpcorner.com/UploadFile/ff2f08/code-first-stored-procedure-entity-framework-6-0/
如果您希望让EF完成所有繁重的任务,那么@Haider-m-rizvi在代码映射上是正确的。
但是,如果您只想简单地调用数据库中的存储过程,那么有一种更简单的执行方法,使用Fluent API。
以下是我所有的SProcs/Function方法所包含的3个通用签名。
public static IEnumerable<T> ExecuteSProc<T> ( this DbContext ctx , string schema , string sproc , params SqlParameter[] para ) {
return ctx.Database.SqlQuery<T>( "Execute " + schema + "." + sproc , para ).ToArray();
}
public static T ExecuteSProcSingle<T> ( this DbContext ctx , string schema , string sproc , params SqlParameter[] para ) {
return ctx.Database.SqlQuery<T>( "Execute " + schema + "." + sproc , para ).SingleOrDefault();
}
public static int ExecuteSProc ( this DbContext ctx , string schema , string sproc , params SqlParameter[] para ) {
return ctx.Database.ExecuteSqlCommand( "Execute " + schema + "." + sproc , para );
}
我会定期发布一些小怪癖,我在几篇帖子中最终形成了一个独特的实现概念:http://theithobbit.blogspot.com/
这种设计的最终目的是像在SSMS中一样执行所需的SProc,并定义参数、模式等。类似于执行RAW动态SQL。