我有以下情况:
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();
}
...它只是不会保存更改。当我手动向数据库添加值时,它可以正常工作,因此应该正确设置关系。
我看了很多类似的条目,但他们都没有保存或没有附加。代码被执行(我可以调试)。可能是什么问题?
答案 0 :(得分:1)
您的员工对象是否有回顾您的定期约会的导航集合?当我在ReccuringAppointments和StaffMembers上都有导航集合时,上面的代码没有保存更改。
如果您只在ReccuringAppointmets上有导航集合,但它确实有效 - 除非我在配置中设置了AutoDetectChangesEnabled = false
。
如果这两种情况都没有发生,代码就完美了 - 如果这些情况对您不适用,您可以发布您的上下文/实体以获取更多信息吗?