所以我有这个不那么特别的方法
public void FlagVoyageAsRemoved(int voyageId)
{
using (UnitOfWork uw = new UnitOfWork())
{
Voyage voyage = uw.VoyageRepository.FindSingle(v => v.VoyageId == voyageId,
new string[] { "VoyageUsers.Costs" });
List<Cost> userCosts = voyage.VoyageUsers.SelectMany(vu => vu.Costs).ToList();
//altough i am putting my items in a new list meaning its a new memory adress, the object tracker can still see them as part of the original collection, how come?
costBl.FlagCostsAsDeleted(userCosts);
// these methods just change a proprety in each element of the collection, nothing more.
costBl.FlagCostsAsDeleted(voyage.Costs);
vUserBl.FlagVoyageUsersAsDeleted(voyage.VoyageUsers);
voyage.HasDeleteFlag = true;
uw.Commit();
}
}
我的问题是,当使用linq时,新的列表元素如何仍然可以被识别为原始集合的一部分,或者这只是来自实体框架对象跟踪器的东西?
答案 0 :(得分:1)
实体框架会跟踪它检索到的所有对象和集合,因此当您调用context.SaveChanges()
(这就是我认为您在uow.Commit()
方法中发生的情况)时,它已经知道要检查的内容。
希望它有所帮助。