我需要使用带有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-SQLdbContext.MyEntity.SqlQuery("dbo.StoredProcedureName @myParam", myParam);
答案 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类似。