1

したがって、基本的に、Person テーブルへの必要な外部キーを保持する Student テーブルがあります。次のようにクラスを設定しました。

class Person
{
    public int PersonID { get; set; }
    public string Phone_Number { get; set; }
    public string Email { get; set; }
    public string Address { get; set; }
    public string First_Name { get; set; }
    public string Last_Name { get; set; }

    //navigation properties
    public virtual Student Student { get; set; }

    public override string ToString()
    {
        return Last_Name + ", " + First_Name;
    }
}

class Student
{
    public int StudentID { get; set; }
    public DateTime Dob { get; set; }

    public int PersonID { get; set; }
    public int Student_TypeID { get; set; }

    //navigation properties
    [Required]
    public virtual Person Person { get; set; }
}

以下のように新しい学生を追加しようとするたびに、個人への外部キーは 0 のままです。

Student student = new Student
{
    Dob = dpStudentDob.Value,
    Student_TypeID = (rdoStudentRegular.Checked) ? 1 : 2,
    Person = new Person
    {
        First_Name = txtStudentFirstName.Text,
        Last_Name = txtStudentLastName.Text,
        Address = txtStudentAddress.Text,
        Email = txtStudentEmail.Text,
        Phone_Number = txtStudentPhoneNum.Text
    }
};

using (var context = new MusicSchoolDB())
{
    context.Students.Add(student);
    context.SaveChanges();
}

何度生徒を追加しても、person の外部キーは 0 のままです。.

よろしくお願いします、J

4

2 に答える 2

0

EF コードの最初のデフォルトの動作は、次のように外部キーに名前を付けることですPerson_ID。あなたはあなたのプロパティPersonIDを呼び出したので、EFはこれがあなたの外部キーであることを認識していません. データベースの内部にはPerson_ID、モデルにマップされていないという名前の列が作成されています。

データ注釈を使用すると、外部キー プロパティが何であるかを EF に明示的に伝えることができます。

public int PersonID { get; set; }

[ForeignKey("PersonID")]
public virtual Student Student { get; set; }
于 2013-10-16T05:25:04.400 に答える
0

これを試して、

class Student
    {
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int StudentID { get; set; }
        public DateTime Dob { get; set; }

        [ForeignKey("Person")]
        [Key]
        public int PersonID { get; set; }
        public int Student_TypeID { get; set; }

        //navigation properties
        public virtual Person Person { get; set; }
    }

class Person
    {
        [Key]
        public int PersonID { get; set; }
        public string Phone_Number { get; set; }
        public string Email { get; set; }
        public string Address { get; set; }
        public string First_Name { get; set; }
        public string Last_Name { get; set; }

        //navigation properties
        public virtual Student Student { get; set; }

        public override string ToString()
        {
            return Last_Name + ", " + First_Name;
        }
    }
于 2013-10-16T05:53:25.877 に答える