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

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

var roomDetails = context.Rooms.ToList();

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

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

 context.SaveChanges();

我得到了错误:

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

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

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


当前回答

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

其他回答

只需向表中添加一个主键。就是这样。问题解决了。

ALTER TABLE <TABLE_NAME>
ADD CONSTRAINT <CONSTRAINT_NAME> PRIMARY KEY(<COLUMN_NAME>)

只需添加一个主键到您的表,然后重新创建您的EF

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

我有这个问题出现,并相信这是因为我删除了我的表主键上的索引,并将其替换为表中其他一些字段的索引。

在我删除主键索引并刷新edmx后,插入停止工作。

我将表刷新到旧版本,刷新edmx,一切都重新工作了。

我应该指出,当我打开EDMX来解决这个问题时,检查是否定义了一个主键,结果是存在的。所以上面的建议对我都没有帮助。但是刷新主键上的索引似乎有用。

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