【问题标题】:How to pass values to DataAccess Layer for storing into database in asp.net MVC5 API?如何将值传递给数据访问层以存储到 asp.net MVC 5 API 中的数据库中?
【发布时间】:2019-03-17 16:50:29
【问题描述】:

在我的 API 应用程序中,我输入了来自注册视图的值,我想将其存储到数据库中。在 AccountController.cs 上,我使用以下代码收集了这些值。

[Route("Register")]
    public async Task<object> Register(UserDetails data)
    {
        var userRegister = new IdentityUser
        {
            FirstName = data.FirstName,
            LastName = data.LastName,
            UserName = data.Email,
            Email = data.Email,
            PhoneNumber = data.PhoneNumber,
            PasswordHash = data.Password
        };


        UserManager<IdentityUser> _manager = new UserManager<IdentityUser>(new UserStore<IdentityUser>(new TachusApi.DBContext.AuthDbContext()));
        string pHash = _manager.PasswordHasher.HashPassword(data.Password);

        DBAccess dbaccess = new DBAccess();

        dbaccess.SaveAdmin(userRegister, pHash);

        return data;
    }

我想要做的是将这些值传递给 DBAccess.cs 中的 SaveAdmin 方法以存储到数据库中。这是我的 SaveAdmin 方法:

#region Save Admin User

    public void SaveAdmin(string userRegister, string hash)
    {
        SqlConnection conn = null;
        SqlCommand command = null;
        int retValue;

        conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
        conn.Open();

        command = conn.CreateCommand();
        command.CommandText = "RequestedServiceUserDataInsert";
        command.CommandType = CommandType.StoredProcedure;


        ...

    }

    #endregion

我无法将值的有效格式传递给我可以将它们保存到数据库中的 SaveAdmin 方法。有没有人可以建议一种有效的方法来帮助我将这些值作为对象传递,以便在我的保存方法中使用它们?请指教

【问题讨论】:

  • 既然您使用的是 ADO.NET,如何将参数传递给存储过程?
  • @JaggenSWE 我实际上遇到了将值传递给 SaveAdmin 方法的问题。完成后,我将使用存储过程

标签: api asp.net-mvc-5 data-access-layer


【解决方案1】:

由于您将 userRegister 对象定义为 IdentityUser 对象

    var userRegister = new IdentityUser
    {
        FirstName = data.FirstName,
        LastName = data.LastName,
        UserName = data.Email,
        Email = data.Email,
        PhoneNumber = data.PhoneNumber,
        PasswordHash = data.Password
    };

然后将其传递给您的 dbaccess 类的 SaveAdmin 函数

    dbaccess.SaveAdmin(userRegister, pHash);

SaveAdmin 方法需要设置为接受 IdentityUser 类型的 userRegister。现在它需要一个纯字符串。

因此,不要将 SaveAdmin 函数声明为:

public void SaveAdmin(string userRegister, string hash)

你需要像这样声明它:

public void SaveAdmin(IdentityUser userRegister, string hash)

这样,该方法就可以获取它所期望的数据,并且您可以访问该对象的所有属性并将它们插入到 SQL Server 中。

【讨论】:

  • 就像你上面所说的,我已经尝试过这样声明 SaveAdmin 方法,但它给了我找不到类型或命名空间“IdentityUser”。错误。跨度>
  • 是的,它是否存在于同一个命名空间中,否则您需要在该变量的 SaveAdmin void 声明中包含完整路径,或者有一个 usingstatement 在其中导入该命名空间以便它可以找到对象定义。检查 AccountController.cs 中的模型或类似内容是否有任何 using 语句,并将其复制到 DBAccess 类中。或者(至少在 Visual Studio 2017 中),将标记放在 void 声明中的 userRegister 上,然后按 Ctrl + .
  • 那是 Microsoft.AspNet.Identity.EntityFramework 命名空间,但 VS 不允许我在这两种情况下都使用它。即在声明 SaveAdmin 方法并将其作为 using 语句导入期间。
猜你喜欢
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
  • 2015-08-17
  • 1970-01-01
  • 2013-06-21
  • 1970-01-01
相关资源
最近更新 更多