2017-08-30 61 views
0

我在下面的方法中編輯我的對象Reservation_House。實體框架「一個實體對象不能被IEntityChangeTracker的多個實例引用」

public void ChangeAssignedMealsAndHouses(int id, NewReservation reservation) 
     { 
      foreach (KeyValuePair<string, int> item in reservation.AssignedHousesMeals) 
      { 
       string houseName = Regex.Match(item.Key, @"\(([^)]*)\)").Groups[1].Value; 
       int houseId = db.Houses.Where(house => house.Name.Equals(houseName)).FirstOrDefault().Id; 
       Reservation_House reservationHouse = (from resHouse in db.Reservation_House 
                 where resHouse.ReservationId.Equals(id) 
                 && resHouse.HouseId.Equals(houseId) 
                 select resHouse).FirstOrDefault(); 
       reservationHouse.MealId = item.Value; 
       db.Entry(reservationHouse).State = EntityState.Modified; 

       ChangeAssignedHouseParticipants(reservationHouse.Id, reservation.AssignedParticipantsHouses[item.Key]); 
       SaveChanges(); 
      } 
     } 

在某個階段還有另一個方法叫做ChangeAssignedHouseParticipants。在這個方法中我也修改了一些實體。

private void ChangeAssignedHouseParticipants(int reservationHouseId, List<Participant> participants) 
     { 
      foreach (Participant participant in participants) 
      { 
       db.Entry(participant).State = EntityState.Modified; 
      } 
     } 

提出了兩種方法在下面的類。

public class ReservationRepository : IReservationRepository 
    { 
     private readonly IAgrotourismContext db; 
...... 
} 

我以這種方式獲得數據庫的上下文。

private readonly IAgrotourismContext db; 

     public ReservationRepository(IAgrotourismContext db) 
     { 
      this.db = db; 
     } 

我假設這是依賴注入的問題。問題在於更新參與者。我該如何解決它?

UnityConfig.cs

public static void RegisterTypes(IUnityContainer container) 
     { 
ProductRepository>(); 
      container.RegisterType<AccountController>(new InjectionConstructor()); 
      container.RegisterType<ManageController>(new InjectionConstructor()); 
      container.RegisterType<IUserRepository,UserRepository>(new PerRequestLifetimeManager()); 
      container.RegisterType<IHouseRepository, HouseRepository>(new PerRequestLifetimeManager()); 
      container.RegisterType<IMealRepository, MealRepository>(new PerRequestLifetimeManager()); 
      container.RegisterType<IAttractionRepository, AttractionRepository>(new PerRequestLifetimeManager()); 
      container.RegisterType<IReservationRepository, ReservationRepository>(new PerRequestLifetimeManager); 
      container.RegisterType<IAgrotourismContext, AgrotourismContext>(new PerRequestLifetimeManager()); 
     } 

回答

0

你可能有你的對象你的IOC組件內的生命週期的配置問題。您需要配置對象以在請求持續的情況下擁有一定的生命週期,這將隔離每個請求的dbcontext實例。你使用哪種依賴注入組件?

+0

是否應該在文件UnityConfig.cs(對象的生命週期)中進行配置? – maciejka

+1

沒關係......你在爲國際奧委會使用統一體,對吧? 因此,本文舉例說明了每個請求的使用週期... http://www.wiktorzychla.com/2013/03/unity-and-http-per-request-lifetime.html 發送一篇團結代碼,看看你在做什麼? –

+0

我已發送代碼。 – maciejka

相關問題