1

モデルファーストアプローチでプロジェクトを作成しました。モデルでは、エンティティ間の多対多の関係を宣言し、MusicianSessionある種のリハーサルまたはパフォーマンスを表します)。予想どおり、これにより、データベースに関係を処理するためのピボットテーブルが生成されましたが、中間テーブルのC#モデルクラスは生成されませんでした。したがって、私のSessionオブジェクトには、 :Musiciansとして宣言されたコレクションがあります。ICollection

public virtual ICollection<Musician> Musicians { get; set; }

これはコンストラクターHashSetでとして初期化されます:Session

public Session()
{
    this.Musicians = new HashSet<Musician>();
}

さて、私のソリューションのどこか(重要な場合はMVCコントローラー内)で、既存のMusicianものを特定のに割り当てたいSessionので、次のコードを使用します。

Musician musician = db.Musicians.First(m => m.Id == selectedMusician);
session.Musicians.Add(musician);
db.SaveChanges();

呼び出された直後にsession.Musicians.Add(musician)、ミュージシャンがコレクションに追加されていることを確認しましたが、呼び出しdb.SaveChangesてもデータベースへの変更が保持されていないようです。

ちなみに、dbは私のすべてのモデルを含む私のリポジトリです。たとえば、このコードSessionはデータベースに新しいものを正常に追加します。

db.Sessions.Add(session);
db.SaveChanges();

この状況でオブジェクトをコレクションに追加する方法について誰かが私を正しい方向に向けることができれば、それは大きな助けになります。

乾杯

編集:問題はそれがコレクションであったという事実とは何の関係もなかったことがわかりました。投稿で述べたように、ASPMVCプロジェクトのコントローラークラスから変更/保存を試みていました。セッションオブジェクトはビューから渡されていましたが、このオブジェクトに加えた変更がデータベースに保持されないことがわかりました(まあ、ばかげているので、すぐにチェックする必要があります)。ビューによって渡されたオブジェクトは、コンテキスト(この場合は私のdbオブジェクト)から直接取得されていないため、単なるコピーのように見えます。Sessionこれを修正するために、変更が実際に保持されるオブジェクトにアクセスできるように、同じIDを持つオブジェクトのコンテキストを照会しました。

4

0 に答える 0