![](/img/trans.png)
[英]ASP.Net MVC How to create a one-to-many relationship between the ApplicationUser and my own class?
[英]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.