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

时间:2011-01-06 20:36:13

标签: c# entity-framework-4

所以我在数据库中有一个表,其中一列只是一个nvarchar(800)。

当我尝试做的时候:

try
{
    UserTable = (from x in entities.userTable where x.uID == uID select x).Single();
    UserTable.DateCreated = DateTime.Now;
    UserTable.text= newText;
    Update(UserTable);
}

我在catch中遇到了异常:"The property 'text' is part of the object's key information and cannot be modified."

当我查看表格时,我在“密钥”或“索引”下看不到任何内容。所以它不是关键,我不明白为什么C#给我不正确的信息。 SQL Management Studio中没有任何内容说“文本”是关键字或索引。我该怎么办?

4 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

按照以下简单步骤

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

步骤2:打开.edmx文件以查看表对象映射。您将能够看到表的每一列都有像主键一样的图标。所以写点击你的页面并从数据库更新.edmx。

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

答案 3 :(得分:0)

此处的问题是实体框架无法更改特定表的主键。现在,如果您没有为表指定主键,实体框架会将所有内容都视为主键,因此您无法对表进行更改。您需要做的是,在表中定义主键,从模型浏览器中删除模型中的表,然后在模型中重新添加表。这肯定会解决它。快乐的编码。干杯!