实体框架代码与现有实体的多对多关系

时间:2012-08-06 12:54:47

标签: c# entity-framework ef-code-first many-to-many

我有以下情况:

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

...它只是不会保存更改。当我手动向数据库添加值时,它可以正常工作,因此应该正确设置关系。

我看了很多类似的条目,但他们都没有保存或没有附加。代码被执行(我可以调试)。可能是什么问题?

1 个答案:

答案 0 :(得分:1)

您的员工对象是否有回顾您的定期约会的导航集合?当我在ReccuringAppointments和StaffMembers上都有导航集合时,上面的代码没有保存更改。

如果您只在ReccuringAppointmets上有导航集合,但它确实有效 - 除非我在配置中设置了AutoDetectChangesEnabled = false

如果这两种情况都没有发生,代码就完美了 - 如果这些情况对您不适用,您可以发布您的上下文/实体以获取更多信息吗?