【问题标题】:How to use stored procedure on MVC 5 with DbContext?如何在带有 DbContext 的 MVC 5 上使用存储过程?
【发布时间】:2016-12-08 14:32:09
【问题描述】:

在 SQL 2008 查询中,我只是执行,如果成功则返回 1。现在如何在 MVC 5 EF dbcontext 中执行此操作?

usp_CreateNewAccount usernamehere, passwordhere, emailhere

我使用实体框架创建了我的控制器项目,并编辑了控制器的 Create 方法。

 db.Users.Add(user);
 db.Users.SqlQuery("usp_CreateNewAccount fsdfsdf, sdfsdfsd, dasda");
 db.SaveChanges();

它没有给出任何结果。我无法创建用户。任何可能的解决方案?

【问题讨论】:

  • 我在实体框架方面的经验是,当涉及到自动生成的代码时,程序并不总是有效。在您的代码中,调用存储过程时我看不到任何参数。从用户调用 SQlQuery 也不是最好的主意,我宁愿使用 db.Database.SqlQuery。您的程序包含的内容也很重要。您应该在此处包含它,因为它可以代表主要问题。
  • 接下来的事情是为什么将用户添加到用户集合并在调用存储过程之后立即添加。那时用户还不能存在于数据库中,因此程序无法处理该记录。
  • @JadaVonRuth 我很难使用 dbcontext,因为我在 MVC 5 中新建了 VS 2015 没有显示任何错误,只有空白页
  • 你可以发布你的程序,它应该做什么?它是否增强了您尝试使用“db.Users.Add(user);”插入的记录还是只向用户表插入行?

标签: stored-procedures asp.net-mvc-5 dbcontext


【解决方案1】:

假设你有存储过程usp_CreateNewAccount:

CREATE PROCEDURE usp_CreateNewAccount
@usernamehere NVARCHAR(...), 
@passwordhere NVARCHAR(...), 
@emailhere NVARCHAR(...)
AS
BEGIN
-- insert query here
END

然后你可以使用DbContext.Database.SqlQuery 和这样的参数:

using (var db = new DataContext()) // DataContext is your DBContext name
{
    var userName = new SqlParameter()
    {
        ParameterName = "usernamehere",
        DbType = DbType.String,
        Value = "fsdfsdf"
    };

    var password = new SqlParameter()
    {
        ParameterName = "passwordhere",
        DbType = DbType.String,
        Value = "sdfsdfsd"
    };

    var email = new SqlParameter()
    {
        ParameterName = "emailhere",
        DbType = DbType.String,
        Value = "dasda"
    };

    // suppose "User" table exists with "db.Users" as DbSet<User> collection
    db.Database.SqlQuery<User>("EXEC usp_CreateNewAccount {0}, {1}, {2}", new Object[] { userName, password, email });
}

这里没有理由使用db.Users.Adddb.SaveChanges 方法,因为存储过程查询已经处理了插入和保存操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    相关资源
    最近更新 更多