C# EF一对多仅显示第一条记录
我遇到一个问题,一对多(志愿者应该有多个AspNetUserRole)在结果中只显示一个角色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
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个重新记录。