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

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

var roomDetails = context.Rooms.ToList();

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

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

 context.SaveChanges();

我得到了错误:

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

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

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


当前回答

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

其他回答

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

这就是我的情况。简单地删除会导致另一个错误。我遵循了这篇文章的步骤,除了最后一个。为了您的方便,我从文章中复制了解决问题的4个步骤,如下:

右键单击edmx文件,选择“使用XML编辑器打开” 在edmx:StorageModels元素中找到实体 完全删除DefiningQuery 将存储区:Schema="dbo"重命名为Schema="dbo"(否则,代码将生成一个错误,表示名称无效)

这不是一个新的答案,但将帮助那些不知道如何设置表的主键的人。在一个新的查询中使用它并运行。这将把UniqueID列设置为主键。

USE [YourDatabaseName]
GO

Alter table  [dbo].[YourTableNname]
Add Constraint PK_YourTableName_UniqueID Primary Key Clustered (UniqueID);
GO

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

添加主键对我也有用!

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

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