Asp.net-Mvc

在實體框架中使用儲存過程

  • January 7, 2014

我正在使用帶有實體框架的 asp.net mvc 5 和 C#…我有函式的模型和域類…現在我需要使用儲存過程….我在運動中苦苦掙扎。

我首先關注現有數據庫的程式碼,並且我已經在那裡編寫了儲存過程。我的問題是如何在我的 Web 應用程序中呼叫該儲存過程。

儲存過程:

ALTER PROCEDURE [dbo].[GetFunctionByID](
   @FunctionId INT
)
AS
BEGIN
   SELECT * 
   FROM Functions As Fun
   WHERE Function_ID = @FunctionId
END

領域類:

public class Functions
{
   public Functions()
   {
   }

   public int Function_ID { get; set; }
   public string Title { get; set; }
   public int Hierarchy_level { get; set; }
}

功能型號:

[Table("Functions")]
public class App_Functions
{
   public App_Functions()
   {
   }

   [Key]
   public int Function_ID { get; set; }

   [StringLength(50)]
   [Required]
   public string Title { get; set; }

   public int Hierarchy_level { get; set; }
   //public virtual ICollection<App_Controllers> App_Controllers { get; set; }*/
}

基本上下文:

public class BaseContext<TContext> : DbContext where TContext : DbContext
{
   static BaseContext()
   {
       Database.SetInitializer<TContext>(null);
   }

   protected BaseContext()
       : base("name = ApplicationDbConnection")
   { }
}

函式上下文:

public class FunctionsContext : BaseContext<FunctionsContext>
{
   public DbSet<App_Functions> Functions { get; set; }
}

您需要創建一個包含所有儲存過程屬性的模型類,如下所示。也因為實體框架模型類需要主鍵,你可以使用 Guid 創建一個假鍵。

public class GetFunctionByID
{
   [Key]
   public Guid? GetFunctionByID { get; set; }

   // All the other properties.
}

然後GetFunctionByID在您的DbContext.

public class FunctionsContext : BaseContext<FunctionsContext>
{
   public DbSet<App_Functions> Functions { get; set; }
   public DbSet<GetFunctionByID> GetFunctionByIds {get;set;}
}

當您呼叫儲存過程時,請參見以下內容:

var functionId = yourIdParameter;
var result =  db.Database.SqlQuery<GetFunctionByID>("GetFunctionByID @FunctionId", new SqlParameter("@FunctionId", functionId)).ToList());

引用自:https://stackoverflow.com/questions/20970416