1

次のような状況があります。

modelBuilder.Entity<RecurringAppointment>()
    .HasMany(ra => ra.StaffMembers)
    .WithMany();

そのため、スタッフ メンバー (ユーザーから継承) は、多くの定期的な予定を持つことができ、その逆も同様です。さて、このように recurringAppointment.StaffMembers にスタッフメンバーを追加しようとすると...

[Invoke]
public void ApplyStaffMembersToRecurringAppointment(int recurringAppointmentId, int[] staffMemberIds)
{
    var staffs = DbContext.Users
        .OfType<Staff>()
        .Where(s => staffMemberIds.Contains(s.Id))
        .ToList();

    var recurringAppointment = DbContext.RecurringAppointments
        .Include("StaffMembers")
        .Single(ra => ra.Id == recurringAppointmentId);

    foreach (var staff in staffs)
    {
        recurringAppointment.StaffMembers.Add(staff);
        DbContext.Users.Attach(staff);
    }

    DbContext.RecurringAppointments.Attach(recurringAppointment);
    DbContext.Entry(recurringAppointment).State = EntityState.Modified;
    DbContext.SaveChanges();
}

...変更を保存しません。データベースに手動で値を追加すると、完全に機能するため、リレーションを正しく設定する必要があります。

同様のエントリをたくさん見ましたが、それらはすべて保存されていないか、添付されていませんでした。コードが実行されます (デバッグできます)。何が問題なのですか?

4

1 に答える 1

1

スタッフ オブジェクトには、定期的な予定を参照するナビゲーション コレクションがありますか? ReccuringAppointments と StaffMembers の両方に nav コレクションがある場合、上記のコードは変更を保存しませんでした。

ReccuringAppointmets にナビゲーション コレクションしかない場合でもAutoDetectChangesEnabled = false、構成で設定していない限り、機能しました。

これらのケースのどちらも発生しなかった場合、コードは完全に機能しました。これらのケースが当てはまらない場合は、コンテキスト/エンティティを投稿して詳細を確認できますか?

于 2012-08-06T13:31:35.417 に答える