如何解决ASP.NET MVC如何在ApplicationUser和其他域类之间使用多对多关系
我目前正在使用使用Entity Framework和代码优先方法的ASP.NET MVC进行项目。前任,我对所有这些都还很陌生,所以有些事情对我来说仍然没有太多意义。
我在ApplicationUser类和Project类之间建立了多对多关系,
IdentityModels.cs:
public class ApplicationUser : IdentityUser
{
public ICollection<UserProject> UserProjects { get; set; }
}
Project.cs:
public class Project
{
[...]
public ICollection<UserProject> UserProjects { get; set; }
}
UserProject.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; }
}
Project.cs:
public class Project
{
[...]
public ICollection<ApplicationUser> Users { get; set; }
}
就是这样。
仍然可以手动添加联接表,但是您将必须自己管理CRUD操作。 如果您仍然想自己添加它,请保留两个模型不变,然后对联接表中的属性进行重新排序以遵守约定,否则数据库可能会变得混乱,在这种情况下,请将其编辑为
{
[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
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。