Léo Le Sommer
Léo Le Sommer

Reputation: 11

Entity framework relation mapping is not working

print("Hello World !");

I'm a beginner into the .NET world, i'm trying to use entity framework but i have a problem, my relations entities are not loaded, i followed the microsoft documentation but.

Here are my models :

[Table("Path")]
public class Path
{
    [Key]
    public int PathId { get; set; }
    [Required]
    public string Title { get; set; }
    public List<Image> Images { get; set; }
    [Required]
    public string Description { get; set; }
    [Required]
    public float LocationX { get; set; }
    [Required]
    public float LocationY { get; set; }
    [Required]
    public string QrCode { get; set; }
    public List<Mark> Marks { get; set; }
}

[Table("Mark")]
public class Mark
{
    [Key]
    public int MarkId { get; set; }
    public int Value { get; set; }
    public int PathForeignKey { get; set; }
    [ForeignKey("PathForeignKey")]
    public Path Path { get; set; }
}

[Table("Image")]
public class Image
{
    [Key]
    public int ImageId { get; set; }
    [Required]
    public string Name { get; set; }
    public string Description { get; set; }
    public int PathForeignKey { get; set; }
    [ForeignKey("PathForeignKey")]
    public Path Path { get; set; }
    [Required]
    public string Source { get; set; }
}

For me, everything is ok, i even have the correct entries into my database : database entries

But my relation dont load when i'm reading database into my controller.

[HttpGet]
public IEnumerable<Path> GetAll()
{
    return _context.Paths.ToList();
}

results

I'm sorry, i guess it is probably a stupid beginner error but i dont see what i did wrong. I tried with various database system, with virtual or not ...

Upvotes: 0

Views: 984

Answers (1)

Prateek Pandey
Prateek Pandey

Reputation: 863

Mark your navigation properties as virtual. For example:

[Table("Mark")]
public class Mark
{
    [Key]
    public int MarkId { get; set; }
    public int Value { get; set; }
    public int PathForeignKey { get; set; }
    [ForeignKey("PathForeignKey")]
    public virtual Path Path { get; set; }  //Added virtual keyword
}

and a second way to load navigation properties is to use Include while fetching data:

return _context.Marks.Include(x => x.Path).ToList();

Upvotes: 3

Related Questions