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?
Hozzászólások
Azt hiszem meg van:
Most megjelennek a Department tábla mezői is. :)