用username添加对象到数据库

时间:2013-05-07 12:28:29

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

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

2 个答案:

答案 0 :(得分:1)

您可以使用User对象,我认为所有用户都是首先进行身份验证的吗?

User.Identity.Name

您的Portfolio对象可以有一个用户名字符串,也可以使用FK到'users'表,并通过从上面传入Name属性来获取此ID。

然后你可以:

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

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

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

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

答案 1 :(得分: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");
}