答案 0 :(得分:1)
在您的投影中创建的匿名对象(“选择新的”部分)是只读的,并且数据上下文不会以任何方式跟踪其属性。
相反,您可以尝试以下操作:
//...
select new
{
p1 = p,
p2 = t
}
foreach (var row in updates)
{
row.p1.Processed = true;
row.p2.Processed = true;
}
为了提高性能,您可能还需要查看Entity Framework Extensions的批处理更新功能(如果使用的是Entity Framework):https://entityframework-extensions.net/overview
答案 1 :(得分:1)
是的,这是由于匿名类型属性是只读的,来自documentation:
匿名类型提供了一种方便的方法来封装一组 将只读属性放入单个对象,而无需显式 首先定义类型。
我建议您使用所需的两个实体(DTO)创建一个自定义类:
public class PassengerDTO
{
public Passenger Passenger {get;set}
public PassengerItinerary PassengerItinerary {get;set}
}
并在投影中使用它,您需要实体实例,而不仅仅是您想要修改的属性,因为在修改Processed
代表您的实体的代理类中的foreach
属性时,会将您实体的状态更改为Updated
。