实体框架代码第一多对多尝试创建重复项

本文关键字:创建 框架 代码 实体 | 更新日期: 2023-09-27 18:21:48

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

当我创建并保存具有多个约会类型的新约会时,会正确填充联接表。

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

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

// 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并不知道您正在对现有实体进行更新。您需要检查是否存在,以决定是添加还是保存。