【问题标题】:The property 'text' is part of the object's key information and cannot be modified属性“文本”是对象的关键信息的一部分,不能修改
【发布时间】:2011-01-06 20:36:12
【问题描述】:

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

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

【问题讨论】:

    标签: c# entity-framework-4


    【解决方案1】:

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

    【讨论】:

    • 哦,你说得对,uID 不是密钥,我以为是。现在 uID 是主键。但是,它仍然给出相同的异常。
    • 嗯,当您更新数据库时,Entity Framework 似乎没有更新“模型”文件。它仍然认为“文本”是以前的键。
    • 如果您右键单击 edmx 画布并从数据库中选择更新模型,它应该重新键入它。
    • @Dexter EF 不会自动更新。您需要请求模型更新
    • 我已经有一个主键(即两个外键的组合,即自然键),但仍然遇到同样的问题......
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      按照这些简单的步骤进行

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-12
          • 2023-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多