"无法分配属性或索引器 - 它是只读的"
我看到很多类似的问题,但实际上似乎没有人帮助我。
我正在更新数据库中的某些行。
首先我打电话给我的数据:
var projects = (from p in _ProjectRep.GetAll()
join cl in _ClientRepo.GetAll() on p.ClientID equals cl.ClientID
where p.IsOpen == true && p.Tasks.Any(t => t.TimeEntries.Any(te => te.DateEntity >= dateLimit)) == false && p.Tasks.Any(te => te.TimeEntries.Any())
select new {
TickProjectID = p.TickProjectID,
ClientName = cl.ClientName,
ProjectName = p.ProjectName,
IsOpen = p.IsOpen,
DateClosed = p.DateClosed
}).ToList();
然后我尝试循环遍历该数据,并更新这些记录中的特定字段。
foreach (var item in projects)
{// Update projects to closed.
item.IsOpen = false;
item.DateClosed = DateTime.Now;
}
最后保存数据..
// updates changes to OUR db.
var affectedCount = _UnitOfWork.SaveChanges();
但我一直得到这个错误,我不知道该怎么办。 我能读到的是关于获取/设置的东西,但我没有这些, 我不明白为什么那些应该是必须的?
希望有人可以提供明确的解决方案,这可能会对我有所帮助。
修改
private readonly ProjectRepository _ProjectRep;
_ProjectRep = new ProjectRepository(unitOfWork);
答案 0 :(得分:1)
var projects = (from p in _ProjectRep.GetAll()
join cl in _ClientRepo.GetAll() on p.ClientID equals cl.ClientID
where p.IsOpen == true && p.Tasks.Any(t => t.TimeEntries.Any(te => te.DateEntity >= dateLimit)) == false && p.Tasks.Any(te => te.TimeEntries.Any())
select p).ToList();
试试这个。您的代码中的问题是,您正在使用匿名类型(使用新的{...}创建)。此类型不知道任何变更跟踪,其属性是只读的,因此此类型不能用于保存对数据库的更改。
答案 1 :(得分:0)
我改变了我的SQL调用选择
var projects = (from p in _ProjectRep.GetAll()
join cl in _ClientRepo.GetAll() on p.ClientID equals cl.ClientID
where p.IsOpen == true && p.Tasks.Any(t => t.TimeEntries.Any(te => te.DateEntity >= dateLimit)) == false && p.Tasks.Any(te => te.TimeEntries.Any())
select new {
Project = p,
ClientName = cl.ClientName
}).ToList();
然后当我想选择数据时,我只需要调用“Project。{something}”。
像这样:foreach (var item in projects)
{// Update projects to closed.
item.Project.IsOpen = false;
item.Project.DateClosed = DateTime.Now;
}
这使整个事情发挥作用。