2

我从 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");
        }
4

2 回答 2

1

您可以使用 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 对象

于 2013-05-07T12:42:06.013 回答
1

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

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

当请求来自客户端时,字段CodeQuantity被初始化,并Username设置为其默认值,即为空。所以在提交到数据库之前简单地初始化它:

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");
}
于 2013-05-07T12:42:14.167 回答