如何使用Fluent API映射存储过程



我需要使用带有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。

最新更新