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

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

var roomDetails = context.Rooms.ToList();

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

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

 context.SaveChanges();

我得到了错误:

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

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

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


当前回答

我遇到了完全相同的问题,不幸的是,添加主键并不能解决问题。下面是我的解决方法:

确保你在表上有一个主键,所以我改变了我的表,添加了一个主键。 删除ADO。NET实体数据模型(edmx文件),我用它来映射和连接我的数据库。 再次添加一个新的ADO文件。NET实体数据模型连接我的数据库和映射我的模型属性。 清理并重新构建解决方案。

问题解决了。

其他回答

它的发生通常是由于以下原因之一:

实体集从数据库视图映射 自定义数据库查询 数据库表没有主键

这样做之后,您可能仍然需要在实体框架设计器中进行更新(或者删除实体然后添加它),然后才能停止得到错误。

这是对的,只要加一个主键

注意:请确保当您从数据库更新EF图时,您指向正确的数据库,在我的情况下,连接字符串指向一个本地DB,而不是最新的Dev DB,我知道,学生错误,但我想发布这个,因为它可以非常令人沮丧,如果你确信你已经添加了主键,你仍然得到相同的错误

添加主键对我也有用!

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

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

请注意,也许你的实体有主键,但你的表在数据库中没有主键。

在我的情况下,忘记定义表的主键。因此,像图中所示的那样分配,并从。edmx文件的“Update model from Database”中刷新你的表。 希望能有所帮助!!