【问题标题】:LINQ to Entity Error on Inserting Records Because of Identity Field由于身份字段,LINQ to Entity 在插入记录时出错
【发布时间】:2015-08-17 21:47:45
【问题描述】:

所以基本上,我正在尝试使用 LINQ to Entity 向我的表中插入一条记录。

        using (MyEntities container = new MyEntities())
        {
             container.MyTable.AddObject(record);
             container.SaveChanges();
        }

现在我的问题是:我要插入的表有一个列 ID,它是 PK 并且是一个身份字段。在我的模型中,我确保将列的StoreGeneratedPattern 属性设置为IDENTITY。但是,当我运行我的代码时,它仍然给我错误消息:

"Cannot insert explicit value for identity column in table 'MyTable' when IDENTITY_INSERT is set to OFF."

我是否缺少需要更新的模型的任何其他属性?

谢谢!

【问题讨论】:

标签: linq entity-framework linq-to-entities identity


【解决方案1】:

该错误似乎是因为您明确为对象提供了 ID 并将 StoreGeneratedPattern 设置为 IDENTITY,这会自动生成 ID 字段(即主键)。
您检查了吗如果您为名为@9​​87654323@ 的对象的ID 字段分配一个值?如果是这样,请尝试删除ID字段的分配,它将由模型在Insert时分配。

EDIT :可能是因为数据库知道该字段应该自动递增,而不是 EF。
打开 edmx 文件并在存储架构定义语言 (SSDL) 区域中,添加属性 StoreGeneratedPattern="Identity"。您的实体类型定义或多或少如下所示:

<EntityType Name="INVOICE">
          <Key>
            <PropertyRef Name="CODE" />
          </Key>
          <Property Name="CODE" Type="varchar" Nullable="false"
              MaxLength="10" StoreGeneratedPattern="Identity"/>         
 </EntityType>

这应该可以,但是如果您更新模型,这些更改将会丢失,您必须重新进行。

【讨论】:

  • 感谢您的回复。我没有给代码中的 ID 字段赋值。但是在进行了一些调试之后,它似乎自动获得了 0 作为它的值。关于为什么会这样的任何想法?非常感谢!
  • 你应该看看我回答的 EDIT 部分,我添加了一些你应该尝试的元素。我认为这是可能发生的问题!
  • 非常感谢!!!我通过模型浏览器更新了我的模型,并确保 StoreGeneratedPattern 设置为身份。我不知道为什么那个 XML 没有接收到它!再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
相关资源
最近更新 更多