私はEntity Frameworkのコードファーストが初めてです。これは、データベースの作成にコード ファーストを使用して、ASP.NET MVC で学んだことです。
私は2つのクラスを持っています:
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; }
}
テーブルを参照する外部キーを持つテーブルにStudent
レコードを挿入しようとしています。Student
SubjectId
Subject
私は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();
}
ここでは、新しいSubject
インスタンスを作成しましたSubjectId=202
。オブジェクトを作成し、Student
値 202 を に割り当てるSubjectId
と、Insert
ステートメントの競合が発生します。Subject
withがありますSubjectId = 202
が、挿入の競合があるのはなぜですか? Subjects
デバッグすると、ここでナビゲーション プロパティが null であることがわかります。ここの要点がわかりません。
2 番目のアプローチ:
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参照例外が発生します
オブジェクト参照がオブジェクトのインスタンスに設定されていません
stu.Subjects
ヌルがここにあるのはなぜですか?
ここでの私の質問は次のとおりです。
SubjectId
inStudent
class とはどういう意味ですか? つまり、その値は何に関係していますか?Subject
明示的に設定できますか? はいの場合、テーブルの主キーを参照しますか? いいえの場合、EF コード規則の目的でのみ指定されていますか?同様に: ナビゲーション プロパティの役割は何ですか? null になるのはなぜですか? null にならないのはいつですか?
ナビゲーション プロパティに関する私の基本的な理解は、EF が 2 つのエンティティ間の関係を決定するために使用されるということです。
誰でも、例を挙げて少し明確にしていただければ幸いです。