【问题标题】:Add object to database with username使用用户名将对象添加到数据库
【发布时间】:2013-05-07 20:47:36
【问题描述】:

我从 MVC4 应用程序的表单中获取一个简单对象

portfolio = {code: xxxxx, quantity: -10}

当我执行此插入操作时,我需要将用户名添加到数据库中,我已经知道我可以从 HTTPContext 获取。

将其包含在以下代码中的最佳方法是什么。我知道我需要更改要添加的对象,但正确的方法是什么?

   public ActionResult Add(Portfolio portfolio)
        {
            var ctx = new MarginEntities();
            ctx.Portfolios.Add(portfolio);
            ctx.SaveChanges();
            return RedirectToAction("Index");
        }

【问题讨论】:

    标签: c# asp.net-mvc entity-framework asp.net-mvc-4


    【解决方案1】:

    扩展Portfolio 类以包含必要的属性:

    class Portfolio
    {
        public string Code { get; set; }
        public int Quantity { get; set; }
        public string Username { get; set; }
    }
    

    当请求来自客户端时,CodeQuantity字段被初始化,Username被设置为默认值,即null。因此,只需在提交到 DB 之前对其进行初始化:

    public ActionResult Add(Portfolio portfolio)
    {
        portfolio.Username = Session["Username"]; // or however the username is stored
    
        var ctx = new MarginEntities();
        ctx.Portfolios.Add(portfolio);
        ctx.SaveChanges();
        return RedirectToAction("Index");
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用 User 对象,我认为所有用户都首先经过身份验证?

      User.Identity.Name
      

      然后,您的 Portfolio 对象可以有一个字符串作为用户名,或者您可以使用“用户”表的 FK,并通过从上面传递 Name 属性来获取此 ID。

      然后你可以有:

      class Portfolio
      {
          ...    
          public string Username { get; set; }
      }
      

      如果您采用这种方法,那么您只需传递带有新用户名属性集的 Portfolio 对象。

      class Portfolio
      {
          ...    
          public int UserId { get; set; }
      }
      

      如果您采用这种方法,则需要从 EF 上下文中请求 UserId,然后使用返回的 UserId 填充 Portfolio 对象

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-09
        • 1970-01-01
        • 1970-01-01
        • 2017-12-28
        • 1970-01-01
        • 2016-09-01
        • 1970-01-01
        相关资源
        最近更新 更多