Entity Frameworkのコードファーストを初めて使用しました。これは、データベース作成のためのコードファーストを使用して、ASP.NET MVCで学んだことです。私は、外部キーSubjectId
Subject
テーブルを参照しているStudent
テーブルへStudent
レコードを挿入しようとしているASP.NET MVCでEntity Frameworkを使用して外部キーを持つテーブルにレコードを挿入する方法
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
public int Standard { get; set; }
public int SubjectId { get; set; }
[ForeignKey("SubjectId")]
public ICollection<Subject> Subjects { get; set; }
}
public class Subject
{
[Key]
public int SubjectId{ get; set; }
public string SubjectName { get; set; }
}
:
は、私は2つのクラスがあります。
私は2つの方法でそれをしようとしている:
まずアプローチ
ここusing(var cxt = new SchoolContext())
{
Subject sub = new Subject() { SubjectId = 202, SubjectName ="Geology" };
Student stu = new Student() { Name = "Riya", SubjectId = 202 };
cxt.Subjects.Add(sub);
cxt.Students.Add(stu);
cxt.SaveChanges();
}
私はSubjectId=202
を持つ新しいSubject
インスタンスを作成しました。今すぐStudent
オブジェクトを作成し、値202をSubjectId
に割り当てると、Insert
の文の競合が発生します。 SubjectId = 202
を持つSubject
がありますが、なぜインサートの衝突がありますか?私がデバッグすると、ナビゲーションプロパティSubjects
がここではnullであることがわかります。私はここでその点を理解していない。
第二のアプローチ:
using(var cxt=new SchoolContext())
{
Student stu = new Student() { Name = "Riya" };
Subject sub = new Subject() { SubjectId = 202, SubjectName = "Geology" };
stu.Subjects.Add(sub);
cxt.Students.Add(stu);
cxt.SaveChanges();
}
しかし、私はnull参照例外
オブジェクト参照がオブジェクト
のインスタンスに設定されていない取得するのはなぜ nullはここですか?
だからここに私の質問は以下のとおりです。
Student
クラスのSubjectId
は何を意味するのでしょうか?私。その価値は何に関係していますか?明示的に設定することはできますか?はいの場合は、Subject
テーブルの主キーを参照しますか?そうでない場合は、EFコード慣行の目的にのみ指定されていますか?同様に、ナビゲーションプロパティの役割は何ですか?なぜそれがヌルで、ヌルにならないのでしょうか?
ナビゲーションプロパティの基本的な理解は、EFが2つのエンティティ間の関係を決定するために使用されるということです。
誰もが非常に感謝される例で少し明確にしていただけますか?
あなたのStudentクラスにSubjectIdは存在しません。おそらくあなたは[多対多](http://www.entityframeworktutorial.net/code-first/configure-many-to-many-relationship-in-code-first.aspx)を探しているでしょう:学生は、多くの科目、科目は多くの生徒を持つことができます。 –
'学生 'では、'科目 'コレクションを仮想としてマークしてください。 – Tipx
@Tipx - バーチャルは、[遅延読み込み](https://stackoverflow.com/questions/15247614/understanding-code-first-virtual-properties)が必要な場合にのみ必要です。それは問題ではありません。 –