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

C# 如何使用Fluent API映射存储过程?,c#,entity-framework,tsql,stored-procedures,C#,Entity Framework,Tsql,Stored Procedures,我需要首先使用EF代码和Fluent API映射从存储过程中检索SQL序列的值 我的存储过程: CREATE PROCEDURE [Security].[GetHashSaltSequence] AS DECLARE @Sequence AS INT = NULL; SELECT @Sequence = NEXT VALUE FOR SequenceName; RETURN @Sequence; 如何使用fluentapi在DbContext中映射此过程 PS:不使用T-SQL,例如 db

我需要首先使用EF代码和Fluent API映射从存储过程中检索SQL序列的值

我的存储过程:

CREATE PROCEDURE [Security].[GetHashSaltSequence]
AS

DECLARE @Sequence AS INT = NULL;
SELECT @Sequence = NEXT VALUE FOR SequenceName;

RETURN @Sequence;
如何使用fluentapi在DbContext中映射此过程

PS:不使用T-SQL,例如

dbContext.MyEntity.SqlQuery("dbo.StoredProcedureName @myParam", myParam);

我不认为还有别的办法。你唯一能做的就是凝乳操作映射

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"))  
        );  
}   
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{  
modelBuilder.Entity()
.MapToStoredProcess(s=>s.Insert(u=>u.HasName(“InsertEmployee”,“dbo”))
.Update(u=>u.HasName(“UpdateEmployee”、“dbo”))
.Delete(u=>u.HasName(“deletemployee”,“dbo”))
);  
}   
查看以下链接,希望这对您有所帮助


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

但是,如果您只想在数据库中调用存储过程,那么有一种更简单的执行方法,使用fluentapi

下面是我的所有存储过程/函数方法都包含的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 );
    }
公共静态IEnumerable ExecuteSProc(此DbContext ctx、字符串架构、字符串存储过程、参数SqlParameter[]para){
返回ctx.Database.SqlQuery(“执行”+schema+“+sproc,para).ToArray();
}
公共静态T ExecuteSProcSingle(此DbContext ctx、字符串架构、字符串存储过程、参数SqlParameter[]para){
返回ctx.Database.SqlQuery(“Execute”+schema+“+sproc,para).SingleOrDefault();
}
public static int ExecuteSProc(此DbContext ctx、字符串架构、字符串存储过程、参数SqlParameter[]para){
返回ctx.Database.ExecuteSqlCommand(“Execute”+schema+”+sproc,para);
}
我会定期将我在几篇文章中总结的一些小怪癖发布到一个独特的实现概念中:

这种设计的最终目的是像在SSMS中一样执行所需的存储过程,并定义参数、模式等。类似于执行原始动态SQL