EF7の複数のテーブルを1つのエンティティにマップする方法

entity-framework entity-framework-core

質問

私は別のスキーマに2つのテーブルがあります:

Base.Person
    ID
    FirstName
    LastName

Enrollment.Student
    PersonID
    StudentNo

これは1対1に関連しています。

今私のDbContextで、私は学生という名前のDbSetを持っているが、私はそのプロパティをPersonとStudentsにマッピングしたい。特に、私はPerson.ID、Person.FirstName、Person.LastName、Student.StudentNoを私のStudentクラスにマッピングしたいと思っています。

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コアでこれを行うことはできません。ただし、次のように1対1の関係をモデル化できます。

[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
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ