簡體   English   中英

實體框架代碼首先與現有實體進行多對多關系

[英]Entity Framework Code First Many to Many Relationship with Existing Entities

我有以下情況:

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();
}

...它只是不會保存更改。 當我手動將值添加到數據庫時,它可以完美工作,因此應正確設置該關系。

我查看了大量的類似條目,但是它們要么都沒有保存,要么沒有附加。 代碼被執行(我可以調試)。 可能是什么問題呢?

您的Staff對象是否有一個導航集合,該導航集合回溯到您的定期約會? 當我在ReccuringAppointments和StaffMembers上都擁有導航集合時,上面的代碼沒有保存更改。

如果您僅在ReccuringAppointmets上具有導航集合,則它確實可以工作-除非我在配置中設置了AutoDetectChangesEnabled = false

如果這兩種情況均未發生,則代碼可以正常工作-如果這些情況對您而言不正確,您可以發布上下文/實體以獲取更多信息嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM