【发布时间】:2018-02-20 04:33:11
【问题描述】:
如何在 Entity Framework Core 中获取具有导航属性的实体?我在docs.microsoft 中看到我必须使用.Include(),它正在一个项目中工作,但这次它不起作用。
模型.cs
public class UniversityModel
{
public int ID { get; set; }
public string Name { get; set; }
public string LongDescription { get; set; }
public string Address { get; set; }
public List<UniSession> Sessions { get; set; }
public DateTime Date { get; set; }
public List<UniEmail> Emails { get; set; }
public List<UniPhone> Phones { get; set; }
}
我正在使用 UniversityModel 的导航属性访问它。
UniversityModel university = await _context.Universities
.Include(u => u.Phones)
.Include(u => u.Emails)
.Include(u => u.Sessions)
.SingleOrDefaultAsync(u => u.ID == id);
它正确地获取了university ,但导航属性不包括在内。
为了看清楚下面的Model,所有的导航属性模型都和大学的外键一样。
public class UniEmail
{
public int ID { get; set; }
public int UniversityId { get; set; }
[StringLength(50)]
public string Email { get; set; }
}
我如何正确地包含所有导航属性有什么问题,如果我的包含代码错误,那么它在另一个项目中是如何工作的?
【问题讨论】:
-
我不确定这是否能解决您的问题,我也不确定 EFCore 是否需要这样做,但我总是将导航属性设为
virtual。你可以试一试吗? (即public virtual List<UniEmail> Emails { get; set; } -
@nbokmans 仍然无法正常工作,你能看出我的代码或模型有什么问题吗?
-
您可以尝试添加反向导航属性吗?例如将
[ForeignKey("UniversityId")] public virtual UniversityModel University { get; set; }添加到UniEmail -
确保
UniveristyModel中的ID 字段也具有[Key]属性。另一个疯狂的猜测是ID是名称敏感的,这意味着您在UniversityModelID中命名了主键列,但在您的UniEmail中,您正试图寻找外键UniversityId(小写@987654339 @,改为public int UniversityID)。 -
你明白了..所有问题都是
ForeignKeyForeignKey应该是UniveristyModelID..谢谢。