Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NET MVC如何使用ApplicationUser和其他域类之间的多对多关系_C#_Asp.net Mvc_Entity Framework_Asp.net Identity_Many To Many - Fatal编程技术网

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

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

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

我在ApplicationUser类和Project类之间建立了多对多关系:

IdentityModels.cs:

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; }
}