C# 属性“text”是对象关键信息的一部分,无法修改

C# 属性“text”是对象关键信息的一部分,无法修改,c#,entity-framework-4,C#,Entity Framework 4,因此,我在数据库中有一个表,其中的一列只是一个nvarchar800 当我尝试这样做时: try { UserTable = (from x in entities.userTable where x.uID == uID select x).Single(); UserTable.DateCreated = DateTime.Now; UserTable.text= newText; Update(UserTable); } catch中有一个异常:属性“te

因此,我在数据库中有一个表,其中的一列只是一个nvarchar800

当我尝试这样做时:

try
{
    UserTable = (from x in entities.userTable where x.uID == uID select x).Single();
    UserTable.DateCreated = DateTime.Now;
    UserTable.text= newText;
    Update(UserTable);
}
catch中有一个异常:属性“text”是对象关键信息的一部分,不能修改


当我查看表时,在键或索引下没有看到任何内容。所以这不是一个键,我不明白为什么C给了我不正确的信息。SQL Management Studio中没有任何关于文本是键或索引的内容。我该怎么办?

桌子上有PK吗?如果不是,EF将使用所有字段/列作为键信息的一部分

双击Models文件夹下的edmx文件,查看数据模型


确保关键点已正确映射。如果在列上单击鼠标右键,则可以切换“图元键”属性。一旦相关列未标记为实体键,您应该能够更新该值。

按照以下简单步骤操作

步骤1:检查表在数据库中是否有主键列。如果没有任何主键,则添加主键。因为若我们不向表中添加主键,那个么实体框架将创建自己的键集合并在其中添加所有列

步骤2:打开.edmx文件以查看表对象映射。您将能够看到表的每一列都有类似图标的主键。所以,请在页面上单击并从数据库更新.edmx


步骤3:如果在所有列上仍然看到相同的主键图标,而不是单击要逐个更新的列名,则转到属性窗口并将实体键属性设置为false。

这里的问题是实体框架无法更改特定表的主键。现在,如果尚未为表指定主键,则实体框架将把所有事项视为主键,从而无法对表进行更改。您需要做的是,在表中定义主键,从模型浏览器中删除模型中的表,然后在模型中重新添加表。这肯定会解决的。快乐编码。干杯

哦,你说得对,uID不是钥匙,我以为是。现在uID是一个主键。但是,它仍然给出了相同的例外。嗯,当您更新数据库时,实体框架似乎没有更新模型文件。它仍然认为“text”是以前的一个键。如果右键单击edmx画布并选择“从数据库更新模型”,它应该重新设置它的键。@Dexter EF不会自动更新。您需要请求模型更新i已经有主键viz。两个外键的组合,即自然键,但仍然存在相同的问题。。。