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

时间:2015-02-07 16:27:42

标签: c# entity-framework tsql stored-procedures

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

2 个答案:

答案 0 :(得分:1)

我不认为还有另一种方法可以做到这一点。只有你能做的就是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/

答案 1 :(得分:0)

如果您希望EF完成所有繁重的工作和分配,那么@ Haider-m-rizvi在代码映射方面是正确的。

但是,如果您只想在数据库中调用sproc,那么使用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/

使用此设计的终极游戏是执行SProc所需,就像您在SSMS中一样,同时定义了参数,模式等。与执行RAW Dynamic SQL类似。