C# 实体框架代码首先多对多尝试创建重复项

C# 实体框架代码首先多对多尝试创建重复项,c#,entity-framework,ef-code-first,C#,Entity Framework,Ef Code First,在我的应用程序中,约会和约会类型之间存在多对多联接。创建数据库时,将创建一个名为AppointTypesAppoints的表作为联接表 当我创建并保存具有多种约会类型的新约会时,将正确填充加入表 但是,当我稍后编辑并重新保存约会时,在不对约会类型进行任何更改的情况下,应用程序会尝试在联接表AppointTypesAppoints中创建重复的条目 如何阻止应用程序尝试创建这些重复行 // appointments are fetched as a group... using (var conte

在我的应用程序中,约会和约会类型之间存在多对多联接。创建数据库时,将创建一个名为AppointTypesAppoints的表作为联接表

当我创建并保存具有多种约会类型的新约会时,将正确填充加入表

但是,当我稍后编辑并重新保存约会时,在不对约会类型进行任何更改的情况下,应用程序会尝试在联接表AppointTypesAppoints中创建重复的条目

如何阻止应用程序尝试创建这些重复行

// appointments are fetched as a group...
using (var context = new SchedulerContext())
        {
            //return GetAll();
            IQueryable<Appointment> queryable = context.Appointments;

            // check if any records exist
            if (queryable.Count() == 0)
            {
                MessageBox.Show(@"No Appointment details found within the database");
            }

           return queryable.ToList();
        }
//-----------------------------------------
// user then edits a single appointment and it is saved as below....
using (var context = new SchedulerContext())
{
    try
    {
        var originalEntity = context.Appointments.Where(x => x.Id == id).FirstOrDefault();
        context.Entry(originalEntity).CurrentValues.SetValues(appointment);
        context.SaveChanges();
        return SuccessResult();
    }
    catch
    {
        return OtherFailResult(id);
    }
}

如何进行编辑和重新保存?很明显,EF不知道您正在对现有实体进行更新。您需要检查是否存在,以确定这是添加还是保存。

这篇文章非常不清楚。请解释并为您的保存和获取方法添加一些代码。约会是使用上下文检索的,例如上下文连接。然后使用新的上下文(例如上下文B…)编辑并重新保存记录。。。。继续的。。。抱歉,我使用id将原始记录恢复到新上下文中,使用我编辑的约会更新值,然后执行上下文。保存更新其他所有内容,但不更新约会类型集合。我认为这可能是问题所在,为什么需要两个上下文。请发布一些代码,以便我们可以帮助您。我认为您需要将约会附加到当前上下文,查看此帖子我添加了用于获取约会集合的代码,用户可以从中选择一个进行编辑。。。