我从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");
}
答案 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; }
}
当请求来自客户端时,字段Code
和Quantity
被初始化,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");
}