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

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

var roomDetails = context.Rooms.ToList();

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

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

 context.SaveChanges();

我得到了错误:

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

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

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


当前回答

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

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

其他回答

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

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

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

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

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

这为我解决了问题。

我也有同样的问题。正如这个帖子所说,我的表没有PK,所以我设置了PK并运行代码。但不幸的是,错误又来了。我接下来做的是,删除数据库连接(删除解决方案资源管理器的模型文件夹中的。edmx文件)并重新创建它。错误消失了。谢谢大家分享你的经验。这样可以节省很多时间。

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