2015-02-07 93 views
1

我需要使用EF Code First和Fluent API映射從存儲過程中檢索SQL序列的值。如何使用Fluent API映射存儲過程?

我的存儲過程:

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); 

回答

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/

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中,同樣定義了參數,模式等。類似於執行RAW動態SQL。