2

私はコードファーストを使用して、実行時にデータベースとデータを生成します。FKの関係でデータをデータベースに挿入する

私の2つのクラス/モデルは、1対多の関係を持っています。 FKはヌルにはできませんので、標準を挿入してから生徒を挿入してください。また、FK IDも手動で入力します。しかし、私はまだSystem.NullReferenceExceptionを取得し、私はちょうど理由を理解できませんか?

私はグーグルで試してみましたが、コード関係の最初から外国関係のデータをゼロから挿入することに関する関連記事は見つかりませんでした。 EFがかかります

using (MyDbContext ctx = new MyDbContext()) 
{ 
    Standard std = new Standard(); 

    Student stud = new Student() 
    { 
     StudentName = "John", 
    }; 

    stud.Standard = std; 

    ctx.Student.Add(stud); 
    ctx.SaveChanges(); 
} 

私のエンティティクラス/モデル

public class Student { 
    public Student() { } 
    public int StudentID { get; set; } 
    public string StudentName { get; set; } 

    public int StandardId { get; set; } // FK StandardId 
    public Standard Standard { get; set; } } 

public class Standard { 
    public Standard() { } 
    public int StandardId { get; set; } 
    public string StandardName { get; set; } 

    public ICollection<Student> Students { get; set; } } 

私のメイン

using (MyDbContext ctx = new MyDbContext()) 
{ 
    Standard std = new Standard(); 
    ctx.Standards.Add(std); 
    ctx.SaveChanges(); // Database already has a StandardID = 1 

    Student stud = new Student() 
    { 
     StudentName = "John", 
     StandardId = 1 // I even manually type in the FK 
    }; 

    ctx.Student.Add(stud); // I still get 'System.NullReferenceException' 
    ctx.SaveChanges(); 
} 

答えて

2

は、手動でこれを行う、あなたのStandardIdを追加しないでください世話をする彼の関係。

+1

私は同意します。エンティティを別々に追加するのではなく、ルートエンティティの関連テーブルを更新しようとするときには注意してください。それは 'Add'操作とは異なります。更新するには、ツリー全体を繰り返し処理し、それらを変更するか、または 'Attach'する必要があります。 – Deniz

+0

EFでも各エントリをループして元の状態を比較し、手動で変更する必要がありますか? – KMC

+0

スカラー型の場合、それらについて心配する必要はありません。エンティティタイプについてはhttp://www.entityframeworktutorial.net/Types-of-Entities.aspxをご覧ください。しかし、ナビゲーションプロパティの場合、分離されたオブジェクトを使って作業している場合は、別々に処理する必要があります(私が知る限り、更新を歓迎します)。 – Deniz

関連する問題