加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何在asp.net mvc中的关系表/模型中包含Applica

发布时间:2020-12-15 19:51:08 所属栏目:asp.Net 来源:网络整理
导读:我试图在ApplicationUser和我添加了Step的表之间创建一个关系表. 我觉得我对于UserUser是什么以及用户管理器等的IdentityUser文章有点困惑. 这是我对该模型的尝试. public class UserStep{ [ForeignKey("User")] public string UserId { get; set; } public
我试图在ApplicationUser和我添加了Step的表之间创建一个关系表.

我觉得我对于UserUser是什么以及用户管理器等的IdentityUser文章有点困惑.

这是我对该模型的尝试.

public class UserStep
{
    [ForeignKey("User")]
    public string UserId { get; set; }
    public int UserStepID { get; set; }
    public int StepID { get; set; }

    public virtual ApplicationUser User { get; set; }
    public virtual Step Step { get; set; }
}

我已根据新信息调整了我的模型,但是我仍然不知道这是否正确.我可以用这个拉取用户步骤的索引:

var userSteps = db.UserSteps.Include(u => u.Step).Include(u => u.User);
    return View(userSteps.ToList());

但是我的目标是仅显示与当前用户相关的步骤.有关如何更改此选项以仅返回当前用户的任何建议?

更新

在userstep的控制器中,我添加了这个新方法并从中创建了一个视图(它爆炸了).我的目标是获取与当前用户关联的用户步骤列表.这不是您在更新2中描述的内容吗?

public ActionResult UserStep()
{
    var user = UserManager.FindById(User.Identity.GetUserId());
    var userStepsList = db.UserSteps.Where(u => u.UserId == user.Id);
    return View(userStepsList);

}

更新 – 工作版

IdentityModel中的ApplicationUser模型

添加

public virtual ICollection<UserStep> UserSteps { get; set; }

UserStep模型

public class UserStep
{
    [ForeignKey("User")]
    public string UserId { get; set; }
    public int UserStepID { get; set; }
    public int StepID { get; set; }

    public virtual ApplicationUser User { get; set; }
    public virtual Step Step { get; set; }


}

步模型

添加

public virtual ICollection<UserStep> UserSteps { get; set; }

创建了userstep控制器并创建了一种新方法来查看用户特定的关系表.

public ActionResult UserStep()
{
    var user = UserManager.FindById(User.Identity.GetUserId());
    var userStepsList = db.UserSteps.Where(u => u.UserId == user.Id).Include(u => u.Step).Include(u => u.User);
    return View(userStepsList);

}

解决方法

您可以将Step对象作为扩展直接添加到ApplicationUser模型.

如果打开IdentityModel.cs,可以添加如下属性:

public class ApplicationUser : IdentityUser 
  {
      public virtual ICollection<Step> UserSteps { get; set; }

      public async Task<ClaimsIdentity> blah blah
      {
           blah
      }
  }

向子对象添加ID(引用父对象)如果我是你,我会通过添加属性public int UserId {get; set;}使ApplicationUser成为父对象(意味着ApplicationUser有一个或多个UserSteps),这样当您需要获取特定用户UserStep时,您可以通过使用用户ID查询db.Steps来实现.

希望这会有所帮助,对问题发表评论,我会尽快查看并提前回来查看.

更新1:

用户对ApplicationUser的引用的方式接近于您要添加到Step的内容.让它看起来更像这样……(在你的Step对象中)

public int UserID { get; set; }
[ForeignKey("UserID")]
public virtual ApplicationUser User { get; set; }

我注意到你的[ForeignKey(“”)]声明与我的表达方式有所不同,我不确定你的方式是否错误,但我知道我的方式对我有用(在导航属性上有[ForeignKey()],而不是实际的模型属性)

我记得我与applicationuser的第一次关系真的很棘手,但是当你得到它时它是如此重要和令人满意.

更新2

回应你的评论……

您将通过以下方式获取对用户的引用:

var user = db.Users.Where(u => u.Id = parameterID)

parameterID是传递给你获取UserSteps集合的ActionResult的id.如果您只想获取当前用户ID,请尝试以下操作:

var user = UserManager.FindById(User.Identity.GetUserId());

然后,您只需从该用户的ID中查询userSteps列表

var userSteps = db.UserSteps.Where(u => u.UserID == user.Id)

然后你可以返回View(userSteps),如果你有一个直接绑定UserStep对象列表的视图(如果我是你,我将如何显示这些).

希望这对你有用,我稍后再回来查看.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读