从控制器MVC 4访问UserProfile

本文关键字:访问 UserProfile MVC 控制器 | 更新日期: 2023-09-27 18:10:01

这一切都是新的:我有一个具有UserProfile属性的Character模型,这样一个字符就可以与UserProfile条目相关联。这将使UserProfile成为字符的外键。

字符模型:

public class Character
{
    public int ID { get; set; }
    public virtual UserProfile user { get; set; }
    public string name { get; set; }
...
}

(我使UserProfile属性虚拟,因为另一个帖子,不确定这是否应该保留)

创建新字符时,我想将该字符的用户属性设置为当前web用户发出请求的对象。例如,以下是用户制作一个字符的过程:登录/创建用户帐户与网站点击"创建角色"

[HttpPost]
public ActionResult Create(Character character)
{
    if (ModelState.IsValid)
    {
        character.user = ???
        db.Characters.Add(character);
        db.SaveChanges();
        ...
}

问题是我不知道如何从控制器访问UserProfile表。通常要访问表,我创建了一个dbContext对象,但UserProfile表使用默认的MVC 4上下文,而我的应用程序的所有其他对象都使用不同的dbContext。

我猜有一些解决方案适合我,但我都不知道怎么做:

  1. 我应该设置我的应用程序,使所有表使用1 dbContext?如果有,怎么做?
  2. 是否有办法创建一个默认dbContext的对象,UserProfile已经在使用?

如果我的术语有误或遗漏了重要信息,请提前道歉。我将根据需要提供更多信息。由于

从控制器MVC 4访问UserProfile

当您登录您的用户信息,如UserId或UserName将存储在

WebSecurity。CurrentUserId

WebSecurity。CurrentUserName

[HttpPost]
public ActionResult Create(Character character)
{
    if (ModelState.IsValid)
    {
        character.user = db.UserProfiles.Find(u => u.UserID = WebSecurity.CurrentUserId); 
        db.Characters.Add(character);
        db.SaveChanges();
    ...
}

我通常将当前用户ID保存在会话变量中,然后在需要时从DB检索该用户。所以代码看起来像这样:

[HttpPost]
public ActionResult Create(Character character)
{
    if (ModelState.IsValid)
    {
        character.user = db.UserProfiles.Find(u => u.UserID = (int) Session["UserID"]); 
        db.Characters.Add(character);
        db.SaveChanges();
    ...
}