2012-01-30 73 views
-2

在我的应用程序中,我在Appointments和AppointmentTypes之间建立了多对多连接。在创建数据库时,将创建一个名为AppointmentTypesAppointments的表作为连接表。实体框架代码首先多对多试图创建重复

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

但是,当我稍后编辑并重新保存约会而不对约会类型进行任何更改时,应用程序会尝试在连接表(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); 
    } 
} 
+1

这篇文章很不清楚。请解释并为您的保存和获取方法添加一些代码。 – 2012-01-30 13:01:56

回答

0

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

+0

使用上下文(例如上下文A)连接来检索约会。然后使用新的上下文(例如上下文B)编辑和重新保存该记录。 – user1178078 2012-01-30 15:12:48

+0

...继续...(对不起)我使用id在新上下文中获取原始记录,使用已编辑的约会更新值,然后执行context.Save,其中更新其他所有内容,但不包括约会类型集合 – user1178078 2012-01-30 15:15:00

+0

我认为这可能是问题,为什么你需要两个上下文。请张贴一些代码,以便我们帮助你。 – 2012-01-30 15:47:55

相关问题