如何在EF7中將多個表映射到一個實體

entity-framework entity-framework-core

我有兩個不同模式的表:

Base.Person
    ID
    FirstName
    LastName

Enrollment.Student
    PersonID
    StudentNo

這是一對一的關係。

現在在我的DbContext中,我想要一個名為Students的DbSet,但我希望它的屬性映射到Person和Students。特別是,我想將Person.ID,Person.FirstName,Person.LastName,Student.StudentNo映射到我的Student類。

學生班是:

public class Student
{
    public int ID { get; set;}
    public string FirstName { get; set;}
    public string MiddleName { get; set;}
    public string StudentNo { get; set;}
}

我想問的另一個問題與我上面的問題無關,但是在設計DbContext時,問上面的示例是否存在會更清楚DbContext是否可以使整個數據庫可供您使用或者只是暴露你想要的東西?例如,在我上面的問題中,我沒有Person DbSet。

熱門答案

您目前無法在EF 7 EF Core中執行此操作。但是,您可以像這樣建立一對一的關係:

[Table("Student", Schema = "Enrollment")]
public class Student
{
    [Key]
    public string StudentNo { get; set; }

    [ForeignKey("PersonId")]
    public Person Person { get; set; }

    [Column("PersonID")] // <-- if your db is case sensitive
    public int PersonId { get; set; }
}

[Table("Person", Schema="Base")]
public class Person
{
    // [Key] - not needed as EF conventions will set this as the "key"
    [Column("ID")] // again, if case sensitive
    public int Id { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }
}


// in code, use .Include to materialize dependent entities like so....
context.Students.Include(s => s.Person).Where(s => s.Person.FirstName == "Bob");

有關建模的更多信息,請參閱https://docs.efproject.net/en/latest/modeling/relationships.html#one-to-one



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow