为了账号安全,请及时绑定邮箱和手机立即绑定

在实体框架中使用存储过程

在实体框架中使用存储过程

繁星点点滴滴 2019-10-11 10:25:45
我正在将asp.net mvc 5和C#与Entity Framework一起使用...我具有函数的模型和领域类...现在我需要使用存储过程....我在先编写现有数据库的代码,并在其中编写存储过程。我的问题是如何在Web应用程序中调用该存储过程。存储过程:ALTER PROCEDURE [dbo].[GetFunctionByID](    @FunctionId INT)ASBEGIN    SELECT *     FROM Functions As Fun    WHERE Function_ID = @FunctionIdEND域类: 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; }*/}BaseContext: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; }}
查看完整描述

3 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

您需要创建一个包含所有存储过程属性的模型类,如下所示。另外,由于Entity Framework模型类需要主键,因此可以使用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());


查看完整回答
反对 回复 2019-10-11
?
慕的地10843

TA贡献1785条经验 获得超8个赞

您可以使用SqlQuery(参见此处)调用存储过程。


// Prepare the query

var query = context.Functions.SqlQuery(

    "EXEC [dbo].[GetFunctionByID] @p1", 

    new SqlParameter("p1", 200));


// add NoTracking() if required


// Fetch the results

var result = query.ToList();


查看完整回答
反对 回复 2019-10-11
?
四季花海

TA贡献1811条经验 获得超5个赞

导入存储过程后,可以通过函数之类的参数创建存储过程的对象


using (var entity = new FunctionsContext())

{

   var DBdata = entity.GetFunctionByID(5).ToList<Functions>();

}

或者你也可以使用 SqlQuery


using (var entity = new FunctionsContext())

{

    var Parameter = new SqlParameter {

                     ParameterName = "FunctionId",

                     Value = 5

            };


    var DBdata = entity.Database.SqlQuery<Course>("exec GetFunctionByID @FunctionId ", Parameter).ToList<Functions>();

}


查看完整回答
反对 回复 2019-10-11
  • 3 回答
  • 0 关注
  • 363 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信