2017-09-08 14 views
2

エンティティフレームワーク内の接続シナリオでエンティティを追加することは可能ですか?私はデータを更新することができますが、追加と削除では接続モードでは動作しません。接続シナリオで新しい項目を追加、エンティティフレームワーク

md.Configuration.AutoDetectChangesEnabled = true; 
    var studentList = md.MyStudent.ToList<Student>(); 
    studentList.Add(new Student { Stdname = "nm" }); 
    md.SaveChanges(); 

新しい項目(「nm」)は追加されません!

EDITED

なぜ、この仕事、更新操作や追加が動作しないん、違いは何ですか?

データベースは

Student studentToUpdate = studentList.Where(s => s.Stdname == "stdname1").FirstOrDefault<Student>(); 
    studentToUpdate.Stdname = "Edited stdname3"; 

答えて

0

に更新されますがmd.MyStudent.Add()メソッドを使用してみてください。それは自動的にあなたのエンティティに加えた変更を永続化することができるように

説明

のビットEFは変更追跡機構を備えています。ただし、EFは変更を検出できるようにするためにオブジェクト/エンティティについて知っていなければなりません。 2番目の例では、EFはフレームワークによって作成されたため学生エンティティについて認識していましたが、DbSetインスタンスのEFコンテキストにWhere()拡張メソッドを適用しました。

はあなたの最初の例では、あなたもDbSetからエンティティを取得し、しかし、この時間は、あなたのデータベースに格納されているすべての学生を含む新しいList<Student>インスタンスを作成しますToList()拡張メソッドを、適用されるが、EFは、参照を持っていませんそのリストには、リスト内のエンティティのみがわかります。結果として、そのリストからアイテムを追加/削除すると、EFはあなたの変更を知らないでしょう。リスト内のエンティティを変更して、変更をデータベースに保存することができます。

+0

ありがとう、私はこのメソッドを知っていますが、このメソッドとDisconnectedモードの違いは何ですか?Add()は接続に関連していないようですが、Disconnectedモードでも動作します。私は正しい? –

+0

EFはあなたの 'studentList'変数について何も知りません。他の「スチューデント」オブジェクトをそのリストに追加することによって、それを保持することはできません。 –

+0

ですので、私の編集を見てください、ありがとう –

1

ToList<Student>()があなたのコンテキストとは無関係の新しいリストを返すため、コードが機能しません。これは、次のコードに似ている:あなたはどこかあなたのプログラムでリストを持っており、それにオブジェクトを追加する場合は、エンティティフレームワークから

IList<Student> studentList = new List<Student>(); 
studentList.Add(new Student { Stdname = "nm" }); 

あなたの状況は気にしないでください。

リスト内の既存のオブジェクトを編集するのは、コンテキストから読み込まれたためです。そのため、コンテキスト内で「登録」されています。

新しいオブジェクトを追加する場合は、オブジェクトにmd.MyStudentを追加する必要があります。コンテキストに新しいオブジェクトを追加する必要があります。

関連する問題