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());
}
是否應該在文件UnityConfig.cs(對象的生命週期)中進行配置? – maciejka
沒關係......你在爲國際奧委會使用統一體,對吧? 因此,本文舉例說明了每個請求的使用週期... http://www.wiktorzychla.com/2013/03/unity-and-http-per-request-lifetime.html 發送一篇團結代碼,看看你在做什麼? –
我已發送代碼。 – maciejka