EF4和EF6的区别

时间:2013-12-20 02:59:40

标签: entity-framework entity-framework-4 entity-framework-6

我只是将应用程序升级到EF6。

我的基础对象Trip包含Reservations。我传递给AddObject和Add函数的我的预订对象只有Trip_Id字段集我没有将Trip导航属性设置为Trip对象。话虽如此,在调用db.SaveChanges之后的EF4中,预留对象DOES可以访问导航属性“Trip”。然而,在EF6中,这不会发生。有什么想法吗?

EF 6代码

 db.Reservations.Add(reservation);
 db.SaveChanges();
 return RedirectToAction("Details", "Trip", new { id = reservation.Trip.Id });  

EF4代码

 db.Reservations.AddObject(reservation);
 db.SaveChanges();
 return RedirectToAction("Details", "Trip", new { id = reservation.Trip.Id }); 

似乎EF6没有AddObject,我需要使用Add功能。

1 个答案:

答案 0 :(得分:0)

您刚刚创建了reservation对象,还是从数据库加载了它?

如果您刚刚创建它,则会引用实际对象,而不是EF将生成的代理。

在这种情况下,我认为这可能适用(尽管最后,它说DbSet.Add()应该自动调用DetectChanges(),而你的db.Reservations属性可能是DbSet打字......嗯......)。

您可能因某种原因关闭了更改跟踪?出于性能原因,可能会这样做。

来自http://msdn.microsoft.com/en-us/data/jj713564.aspx

  

同步FK和导航属性之间的更改

     

当您更改附加到的对象的关系时   上下文通过使用上述方法之一,实体   框架需要保留外键,引用和集合   同步。实体框架自动管理此同步   POCO实体的(也称为关系修复)   代理。有关更多信息,请参阅使用代理。

     

如果您使用没有代理的POCO实体,则必须确保   调用DetectChanges方法来同步相关的   上下文中的对象。请注意,以下API自动生成   触发DetectChanges调用。

     

DbSet.Add DbSet.Find DbSet.Remove DbSet.Local DbContext.SaveChanges   DbSet.Attach DbContext.GetValidationErrors DbContext.Entry   DbChangeTracker.Entries对DbSet执行LINQ查询