我使用实体框架1与。net 3.5。

我做的事情很简单,就像这样:

var roomDetails = context.Rooms.ToList();

foreach (var room in roomDetails)
{        
   room.LastUpdated = DateTime.Now;
}

当我尝试这样做时,我得到这个错误:

 context.SaveChanges();

我得到了错误:

无法更新EntitySet -因为它有一个DefiningQuery,并且<ModificationFunctionMapping>元素中没有<UpdateFunction>元素来支持当前操作。

我在上下文上做了很多更新,没有任何问题,只有当我试图更新这个特定的实体时。

我所有的搜索结果都是一样的,我要更新的实体上没有声明主键。但是,唉,我有一个主键声明…


当前回答

如果你的表没有主键,这个错误可能已经发生,在这种情况下,表是“只读”的,而db。SaveChanges()命令将始终出错。

其他回答

设置主键,然后保存表和刷新,然后去模型。edmx删除表,重新获取。

我只需要从模型中删除表,并再次更新模型将表带回来。我猜主键是在将表拉入模型之后创建的。

添加主键对我也有用!

完成之后,下面是如何在不删除数据模型的情况下更新数据模型

右键单击edmx实体设计器页面和“从数据库更新模型”。

我得到这个问题,因为我正在生成我的EDMX从一个现有的数据库(由别人设计,我使用术语“设计”松散在这里)。

结果发现桌子上根本没有钥匙。EF生成了具有多个键的模型。我必须在SQL中添加一个主键到db表,然后在VS中更新我的模型。

这为我解决了问题。

在XML编辑器中打开您的.edmx文件,然后从标签中删除标签,并将store:Schema="dbo"更改为Schema="dbo",重新构建解决方案,现在错误将得到解决,您将能够保存数据。