我使用实体框架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文件的“Update model from Database”中刷新你的表。 希望能有所帮助!!

其他回答

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

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

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

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

添加主键对我也有用!

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

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

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

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

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

USE [YourDatabaseName]
GO

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

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

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

这为我解决了问题。