ASP.NET MVC 如何在 ApplicationUser 和其他域之间使用多对多关系 Class
ASP.NET MVC How to Use Many to Many Relationship Between ApplicationUser and Other Domain Class
我目前正在使用 ASP.NET MVC、Entity Framework 和代码优先方法开发一个项目。 Precursor,我对所有这些都很陌生,所以有些事情对我来说仍然没有多大意义。
我在 ApplicationUser class 和项目 class 之间建立了多对多关系:
IdentityModels.cs:
public class ApplicationUser : IdentityUser
{
public ICollection<UserProject> UserProjects { get; set; }
}
Project.cs:
public class Project
{
[...]
public ICollection<UserProject> UserProjects { get; set; }
}
用户Project.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; }
}
我为我的 ApplicationDbContext 创建了一个 UserProject 的 DbSet,并为此创建了一个迁移。
话虽如此,我的问题是我将如何使用这种关系?更具体地说,如果我只想显示登录用户分配到的项目,我该怎么做呢?
此外,我目前的假设是,如果我想将项目分配给用户,我最终只需要使用给定的用户 ID 和我想要分配给他们的项目 ID 创建一个新的 UserProject 对象。会是这样吗?
我对这种关系的配置是否设置得很好,或者我应该考虑更改它以获得上述功能吗?
感谢您提供的所有帮助。谢谢!
从上一个问题开始,关于配置
EF6 支持 many-to-many 关系,因此无需手动创建连接 table UserProject
你可以简单地这样做
IdentityModels.cs:
public class ApplicationUser : IdentityUser
{
public ICollection<Project> Projects { get; set; }
}
Project.cs:
public class Project
{
[...]
public ICollection<ApplicationUser> Users { get; set; }
}
就是这样。
手动添加连接 table 仍然可以,但您必须自己管理 CRUD 操作。
如果您仍然想自己添加它,请保持 2 个模型不变并重新排序连接 table 中的属性以遵守约定,否则数据库可能会变得混乱,在这种情况下将其编辑为
{
[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
列表。
我目前正在使用 ASP.NET MVC、Entity Framework 和代码优先方法开发一个项目。 Precursor,我对所有这些都很陌生,所以有些事情对我来说仍然没有多大意义。
我在 ApplicationUser class 和项目 class 之间建立了多对多关系:
IdentityModels.cs:
public class ApplicationUser : IdentityUser
{
public ICollection<UserProject> UserProjects { get; set; }
}
Project.cs:
public class Project
{
[...]
public ICollection<UserProject> UserProjects { get; set; }
}
用户Project.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; }
}
我为我的 ApplicationDbContext 创建了一个 UserProject 的 DbSet,并为此创建了一个迁移。
话虽如此,我的问题是我将如何使用这种关系?更具体地说,如果我只想显示登录用户分配到的项目,我该怎么做呢?
此外,我目前的假设是,如果我想将项目分配给用户,我最终只需要使用给定的用户 ID 和我想要分配给他们的项目 ID 创建一个新的 UserProject 对象。会是这样吗?
我对这种关系的配置是否设置得很好,或者我应该考虑更改它以获得上述功能吗?
感谢您提供的所有帮助。谢谢!
从上一个问题开始,关于配置
EF6 支持 many-to-many 关系,因此无需手动创建连接 table UserProject
你可以简单地这样做
IdentityModels.cs:
public class ApplicationUser : IdentityUser
{
public ICollection<Project> Projects { get; set; }
}
Project.cs:
public class Project
{
[...]
public ICollection<ApplicationUser> Users { get; set; }
}
就是这样。
手动添加连接 table 仍然可以,但您必须自己管理 CRUD 操作。 如果您仍然想自己添加它,请保持 2 个模型不变并重新排序连接 table 中的属性以遵守约定,否则数据库可能会变得混乱,在这种情况下将其编辑为
{
[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
列表。