2011-01-06 50 views
8

所以我有一个在数据库中的表,只有一个列是一个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); 
} 

我得到捕捉到了异常:"The property 'text' is part of the object's key information and cannot be modified."

当我看着桌子上,我看不出在“关键”或“指数”什么。所以这不是关键,我不明白为什么C#会给我提供不正确的信息。 SQL Management Studio中没有任何关于“text”是键或索引的内容。我该怎么办?

回答

16

桌上有PK吗?如果不是,EF将所有字段/列用作“关键信息”的一部分。

+0

哦,你说的对,uID不是关键,我以为是。现在uID是一个主键。但是,它仍然会给出同样的例外。 – Dexter 2011-01-06 20:43:00

0

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

确保密钥正确映射。如果您右键单击列,您可以切换实体键属性。一旦有问题的列未标记为实体键,您应该可以更新该值。

0

遵循以下简单步骤

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

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

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

0

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

相关问题