C# EntityFramework foreign key, Select Join

Fórumok

Üdv,

Egy teszt alkalmazással próbálkozom a témában. Egy táblával működik, két táblával szeretném összehozni (MySQL):

persons(id,name,city,departmentid); departments(id,departmentname) // foreign key: persons.departmentid -> departments.id
# DemoContext.cs
internal class DemoContext : DbContext
{
    private string connectionString;

    public DemoContext(string connectionString) {
        this.connectionString = connectionString;
    }

    // tables
    public DbSet<Person> Persons { get; set; }
    public DbSet<Department> Departments { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseMySQL(connectionString);
    }

}
# Person.cs

[Table("persons")]
internal class Person
{
    [Key]
    [Column("id")]
    public int Id { get; set; }
    [Column("name")]
    public string Name { get; set; }
    [Column("city")]
    public string City { get; set; }
    // Foreign key property to the Department
    [ForeignKey("departmentid")]
    [Column("departmentid")]
    public int DepartmentId { get; set; }
    // Reference navigation to Department
    public virtual Department Department { get; set; }
}
# Department.cs
 [Table("departments")]
 internal class Department
 {
     [Key]
     [Column("id")]
     public int Id { get; set; }
     [Column("departmentname")]
     public string departmentName { get; set; }
 }

 

A lekérdezésben szeretném megjeleníteni a Person-hoz a Department nevet is:

SELECT p.id,p.name,p.city,d.id,d.departmentname FROM person p LEFT JOIN department d ON p.departmentid=d.id

 

# Program.cs

using var DemoContext = new DemoContext("...............");
var personlist = DemoContext.Persons.Include(p => p.Department).OrderBy(p => p.DepartmentId).ToList();
foreach (var row in DemoContext.Persons.ToList())
       Console.WriteLine("{0}, {1}, {2}, {3}, {4}", row.Id.ToString(), row.Name, row.City, row.DepartmentId, row.Department);

Szépen lefut, de a department táblából nem hozza át a mezőt (departmentname). Rosszul hivatkozok a Person osztályban gondolom. Hol rontom el?

 

(ez alapján próbáltam)

Hozzászólások

Azt hiszem meg van:

    var personlist = DemoContext.Persons.Include(p => p.Department).OrderBy(p => p.Department.departmentName).ToList();
    foreach ( var row in DemoContext.Persons.ToList() )
        Console.WriteLine("{0}, {1}, {2}, {3}, {4}, {5}", row.Id.ToString(), row.Name, row.City, row.DepartmentId, row.Department.Id, row.Department.departmentName);

Most megjelennek a Department tábla mezői is. :)