Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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# EF一对多仅显示第一条记录_C#_.net_Entity Framework - Fatal编程技术网

C# EF一对多仅显示第一条记录

C# EF一对多仅显示第一条记录,c#,.net,entity-framework,C#,.net,Entity Framework,我遇到一个问题,一对多(志愿者应该有多个AspNetUserRole)在结果中只显示一个角色 var test2 = from a in _context.Volunteer.Where(a => a.AspNetUserId == "25a6aef9-cc59-4bbc-bd9d-078d2asaa560") select a.AspNetUserRoles; var sql = test2.ToQueryString(); “sql

我遇到一个问题,一对多(志愿者应该有多个AspNetUserRole)在结果中只显示一个角色

        var test2 = from a in _context.Volunteer.Where(a => a.AspNetUserId == "25a6aef9-cc59-4bbc-bd9d-078d2asaa560") select a.AspNetUserRoles;
        var sql = test2.ToQueryString();
“sql”值是完美的-如果对数据库手动运行,它将返回3个结果。但是,使用调试器导航到test2的角色只返回一个值。有人知道为什么会这样吗

public class Volunteer : BaseVolunteer
{
}

public abstract class BaseVolunteer
{
    [Key]
    public String AspNetUserId { get; set; }
    [Required]
    [Display(Name = "First Name")]
    public string FirstName { get; set; }
    [Required]
    [Display(Name = "Last Name")]
    public string LastName { get; set; }
    //[Required] //This was removed because FamilyMembers inherit this and it is not required for that
    [EmailAddress]
    public string Email { get; set; }
    public int CityId { get; set; }
    [ForeignKey("CityId")]
    public virtual City City { get; set; }

    [ForeignKey("UserId")]
    //[ForeignKey("Id")]
    public virtual ICollection<AspNetUserRole> AspNetUserRoles { get; set; } 
    [NotMapped]
    [Display(Name = "Family")]
    public List<FamilyMember> FamilyMembers { get; set; }
}

public class AspNetUserRole
{
    [Key]
    public String UserId { get; set; }

    [Required]
    public string RoleId { get; set; }

    [ForeignKey("Id")]
    //[ForeignKey("RoleId")]
    public virtual ICollection<AspNetRole> AspNetRoles { get; set; }
}
公共班级志愿者:基本志愿者
{
}
公共抽象类基类
{
[关键]
公共字符串AspNetUserId{get;set;}
[必需]
[显示(Name=“First Name”)]
公共字符串名{get;set;}
[必需]
[显示(Name=“Last Name”)]
公共字符串LastName{get;set;}
//[Required]//此项已删除,因为FamilyMembers继承此项,而该项不是必需的
[电邮地址]
公共字符串电子邮件{get;set;}
public int CityId{get;set;}
[外键(“CityId”)]
公共虚拟城市城市{get;set;}
[外键(“用户ID”)]
//[外国钥匙(“Id”)]
公共虚拟ICollection AspNetUserRoles{get;set;}
[未映射]
[显示(Name=“Family”)]
公共列表族成员{get;set;}
}
公共类AspNetUserRole
{
[关键]
公共字符串用户标识{get;set;}
[必需]
公共字符串RoleId{get;set;}
[外国钥匙(“Id”)]
//[外国钥匙(“RoleId”)]
公共虚拟ICollection AspNetRoles{get;set;}
}
试试这个

var test2 = _context.Volunteer
.Where(a => a.AspNetUserId == "25a6aef9-cc59-4bbc-bd9d-078d2asaa560") 
.Select(a=> a.AspNetUserRoles).FirstOrDefault();

问题是我没有正确指定密钥。UserRole表上的键实际上是一个复合键。在OnModelCreating中添加以下代码导致返回3条记录

modelBuilder.Entity().HasKey(c=>new{c.UserId,c.RoleId})


最终,对我来说有些奇怪的行为——我知道对于不正确指定的键,应该会发生一些“错误”的情况,但我没有料到会丢失记录。仍然不确定实体框架行为的根本原因是什么。

我认为应用程序运行的数据库与手动运行脚本时运行的数据库不同:)再次检查连接字符串:)您错过了OP的点
“sql”值是完美的-如果手动运行数据库,它将返回3个结果。但是,使用调试器导航到test2的角色只返回一个值。
。他不知道为什么在SSMS中执行原始SQL时得到一个记录,他得到了3个重新记录。