繁体   English   中英

ASP.NET MVC如何使用ApplicationUser和其他域类之间的多对多关系

[英]ASP.NET MVC How to Use Many to Many Relationship Between ApplicationUser and Other Domain Class

我目前正在使用 ASP.NET MVC,使用实体框架和代码优先方法开发一个项目。 先行者,我对所有这些都很陌生,所以有些事情对我来说仍然没有多大意义。

我在 ApplicationUser 类和 Project 类之间建立了多对多关系,如下所示:

IdentityModels.cs:

public class ApplicationUser : IdentityUser
{
    public ICollection<UserProject> UserProjects { get; set; }
}

项目.cs:

public class Project
{
    [...]
    public ICollection<UserProject> UserProjects { get; set; }
}

用户项目.cs:

public class UserProject
{
    [Key, Column(Order = 1)]
    public string UserId { get; set; }
    [Key, Column(Order = 2)]
    public int ProjectId { get; set; }
    public ApplicationUser User { get; set; }
    public Project Project { get; set; }
}

我创建了一个 UserProject 的 DbSet 到我的 ApplicationDbContext 并为此创建了一个迁移。

话虽如此,我的问题是我将如何使用这种关系? 更具体地说,如果我只想显示已登录用户分配到的项目,我该怎么做?

此外,我目前的假设是,如果我想将项目分配给用户,我最终只需要使用给定的用户 ID 和我想要分配给它们的项目 ID 创建一个新的 UserProject 对象。 这会是它的工作方式吗?

我对这种关系的配置是否设置得很好,还是应该考虑更改它以获得上述功能?

任何和所有的帮助表示赞赏。 谢谢!

从上一个问题开始,关于配置

EF6 支持多对多关系,因此无需手动创建连接表UserProject您可以简单地执行此操作

IdentityModels.cs:

public class ApplicationUser : IdentityUser
{
    public ICollection<Project> Projects { get; set; }
}

项目.cs:

public class Project
{
    [...]
    public ICollection<ApplicationUser> Users { get; set; }
}

就是这样。

手动添加连接表仍然可以工作,但您必须自己管理 CRUD 操作。 如果您仍然想自己添加它,请保留 2 个模型,并重新排列连接表中的属性以遵守约定,否则数据库可能会变得混乱,在这种情况下将其编辑为

{
    [Key, Column(Order = 1)]
    public string UserId { get; set; }
    public ApplicationUser User { get; set; }

    [Key, Column(Order = 2)]
    public int ProjectId { get; set; }
    public Project Project { get; set; }
}

要获取用户的项目列表,您可以简单地访问模型中的列表(确保在从数据库查询用户时包含它)


您的假设是正确的,这取决于您将采用哪种方法,或者创建一个包含 Id 的新UserProject ,或者将一个Project添加到User.Projects列表中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM