C# NET MVC如何使用ApplicationUser和其他域类之间的多对多关系
我目前正在从事一个使用ASP.NETMVC的项目,使用实体框架和代码优先的方法。我对所有这些都很陌生,所以有些事情对我来说仍然没有太多意义 我在ApplicationUser类和Project类之间建立了多对多关系: IdentityModels.cs:C# NET MVC如何使用ApplicationUser和其他域类之间的多对多关系,c#,asp.net-mvc,entity-framework,asp.net-identity,many-to-many,C#,Asp.net Mvc,Entity Framework,Asp.net Identity,Many To Many,我目前正在从事一个使用ASP.NETMVC的项目,使用实体框架和代码优先的方法。我对所有这些都很陌生,所以有些事情对我来说仍然没有太多意义 我在ApplicationUser类和Project类之间建立了多对多关系: IdentityModels.cs: public class ApplicationUser : IdentityUser { public ICollection<UserProject> UserProjects { get; set; } } publ
public class ApplicationUser : IdentityUser
{
public ICollection<UserProject> UserProjects { get; set; }
}
public class ApplicationUser : IdentityUser
{
public ICollection<Project> Projects { get; set; }
}
我在ApplicationDbContext中创建了UserProject的数据库集,并为此创建了迁移
说到这里,我的问题是我将如何利用这种关系?更具体地说,如果我只想显示已登录用户被分配到的项目,我该怎么做呢
另外,我目前的假设是,如果我想将项目分配给用户,我最终只需要使用给定的用户ID和我想分配给他们的项目ID创建一个新的UserProject对象。这就是它的工作原理吗
我的关系是以一种好的方式建立的吗?或者我应该考虑改变它来获得上面的功能?
非常感谢您的帮助。谢谢 从最后一个问题开始,关于配置 EF6支持多对多关系,因此无需手动创建联接表
UserProject
你可以简单地做到这一点
IdentityModels.cs:
public class ApplicationUser : IdentityUser
{
public ICollection<UserProject> UserProjects { get; set; }
}
public class ApplicationUser : IdentityUser
{
public ICollection<Project> Projects { get; set; }
}
要获取用户的项目列表,您只需访问模型中的列表(确保在从数据库查询用户时包含该列表)
您的假设是正确的,这取决于您将采取的方法,您可以创建一个包含ID的新的
UserProject
,或者将Project
添加到User.Projects
列表中。非常感谢您的回复!对于您提到的“要获取用户的项目列表,您只需访问模型中的列表(确保从数据库查询用户时包含该列表)”,我有点困惑。我该怎么做?我这样问是因为据我所知,向用户添加一个项目的ICollection(如上所述)仍然不会将项目放入数据库的AspNetUsers表中,因此我如何在控制器中访问此列表?再次感谢ApplicationUser.Projects
是一个导航属性,框架负责此处的映射。检查以了解有关加载数据的更多信息,这将澄清我所说的“确保它包括在内”的意思,这将更有意义。非常感谢你的帮助!
public class Project
{
[...]
public ICollection<ApplicationUser> Users { get; set; }
}
{
[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; }
}