2013-02-10 38 views
0

我正在使用EF。我將實體保存到緩存中。即使我將它分開,IEntityChangeTracker的多個實例也無法引用實體對象

我投入緩存,

,並從緩存中獲取後,連接到一個新的ObjectContext之前分離的每個實體。

我使用using聲明在一個高點(在我的BL類,在每一個請求)

然而,我得到這個錯誤:

System.InvalidOperationException: An entity object cannot be referenced by multiple instances of IEntityChangeTracker. 
at System.Data.Objects.ObjectContext.VerifyContextForAddOrAttach(IEntityWrapper wrappedEntity) 
at System.Data.Objects.ObjectContext.AttachSingleObject(IEntityWrapper wrappedEntity, EntitySet entitySet, String argumentName) 
at System.Data.Objects.ObjectContext.AttachTo(String entitySetName, Object entity) 
at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) 
at System.Data.Entity.Internal.Linq.InternalSet`1.Attach(Object entity) 
at System.Data.Entity.DbSet`1.Attach(TEntity entity) 
at Conduit.Mam.ClientService.DAL.MamData.MamDataRepository.GetMamData(String stamp, MaMDBEntities maMDBEntities) in d:\Builds\TFS\9\221\Sources\Server\ClientServices\Dev\ClientService 1.3\ServiceDAL\MamData\MamDataRepository.cs:line 56 
at Conduit.Mam.ClientService.BLL.MamDataManager.GetMamData() in d:\Builds\TFS\9\221\Sources\Server\ClientServices\Dev\ClientService 1.3\Conduit.Mam.ClientService.BLL\MamDataManager.cs:line 57 
at Conduit.Mam.ClientService.BLL.AppsDataManager.GetClientRelevantsApps(List`1 appsData) in d:\Builds\TFS\9\221\Sources\Server\ClientServices\Dev\ClientService 1.3\Conduit.Mam.ClientService.BLL\AppsDataManager.cs:line 107 
at Conduit.Mam.ClientService.Service.Controllers.ClientDataController.GetAppsData() in d:\Builds\TFS\9\221\Sources\Server\ClientServices\Dev\ClientService 1.3\Conduit.Mam.ClientService.Service\Controllers\ClientDataController.cs:line 58 

這裏是我的分離+附加代碼: 該using注入的ObjectContext到這裏:

public static Group GetMamData(string stamp, MaMDBEntities maMDBEntities) 
    { 
     Group group = MamDataCacheManager.GetMamData(stamp); 

     if (group == null) 
     { 
      //was not found in the cache 
      //check for aveilable test with status 'start' - 1 
      group = GetGroupsFromDb(stamp, maMDBEntities); 

      if (group != null) 
      { 
       maMDBEntities.Entry(group).State = EntityState.Detached; 

       MamDataCacheManager.InsertMamData(stamp, group); 

      } 
     } 

     //option B: attache a new context 
     if (maMDBEntities.Entry(group).State == EntityState.Detached) 
     { 
      maMDBEntities.Groups.Attach(group); 
     } 

     return group; 
    } 

第一次(獲得新鮮的實體從數據庫到緩存):

實體被分離並附加到相同的contextObjec。

第二次(從緩存中獲取的實體),

它只能連接到一個新的contextObject。

我必須做任何額外的步驟嗎?我的分離失蹤了嗎?

回答

0

分離僅影響傳遞給方法的特定對象。如果被分離的對象在對象上下文中具有相關對象,則這些對象不會被分離。

相關問題