【问题标题】:Entity Framework Code First Many to Many Relationship with Existing EntitiesEntity Framework Code First 与现有实体的多对多关系
【发布时间】:2012-08-06 12:54:46
【问题描述】:

我有以下情况:

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

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

我查看了大量类似的条目,但它们要么没有保存,要么没有附加。代码被执行(我可以调试)。可能是什么问题?

【问题讨论】:

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


    【解决方案1】:

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

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

    如果这两种情况都没有发生,则代码运行良好 - 如果这些情况对您来说不正确,您可以发布您的上下文/实体以获取更多信息吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多