我只是尝试使用连接条件进行Linq查询更新
var GsOrderUpdate = (from x in ctxParser.Tbl_Order_Hierarchy
join y in ctxParser.tbl_GS_Related_Orders
on x.RootOrder equals y.RelatedOrder
where y.ParentId == sParentId
select new
{
ID = x.ID,
RelatedOrderParentId = y.ID
});
foreach (var gs in GsOrderUpdate)
{
gs.RelatedOrderParentId = gs.ID;
}
ctxParser.SaveChanges();
我正在谴责这个错误:
属性或索引器匿名类型RelatedOrderParentId无法分配给它是只读的。
如何解决此问题。
答案 0 :(得分:1)
您不能使用匿名类型来更新EntityFramework。 如果您想更新,请尝试:
var GsOrderUpdate = (from x in ctxParser.Tbl_Order_Hierarchy
join y in ctxParser.tbl_GS_Related_Orders
on x.RootOrder equals y.RelatedOrder
where y.ParentId == sParentId
select new
{
Parent = x,
Child = y
});
foreach (var gs in GsOrderUpdate)
{
gs.Child.RelatedOrderParentId = gs.Parent.ID;
}
ctxParser.SaveChanges();
答案 1 :(得分:0)
实体框架不跟踪匿名类型对象的更改。它只跟踪实体的变化。
您可以更改代码以执行以下操作:
var GsOrderUpdate = (from x in ctxParser.Tbl_Order_Hierarchy
join y in ctxParser.tbl_GS_Related_Orders
on x.RootOrder equals y.RelatedOrder
where y.ParentId == sParentId
select new
{
ID = x.ID,
Order = y
});
foreach (var gs in GsOrderUpdate)
{
gs.Order.RelatedOrderParentId = gs.ID;
}
ctxParser.SaveChanges();
现在,您包含要更新的整个实体。
答案 2 :(得分:0)
使用Entity类而不是匿名对象:
var GsOrderUpdate = (from x in ctxParser.Tbl_Order_Hierarchy
join y in ctxParser.tbl_GS_Related_Orders
on x.RootOrder equals y.RelatedOrder
where y.ParentId == sParentId
select new YourEntityName
{
ID = x.ID,
RelatedOrderParentId = y.ID
});