如何在实体框架中插入标识列的值

本文关键字:标识 插入 实体 框架 | 更新日期: 2023-09-27 18:05:49

我在sql表中创建了两个列,一个是标识列,另一个是varchar列。我需要从值1000开始生成标识列。我已经尝试了下面的代码片段,但它给出了错误"在更新条目时发生错误。有关详细信息,请参阅内部异常。"

   Place objPlace = new Place();
   objPlace.PNAME = "place 3";
   //objPlace.PID = 1003;   //purposefully commented for auto increment
   objContext.Places.AddObject(objPlace);
   objContext.SaveChanges();

我想这是一个非常基本的问题,因为我是EF的新手,所以请帮我整理一下。

如何在实体框架中插入标识列的值

您只是想在EF中这样做来学习语法吗?我之所以这样问,是因为您可以在SSMS (http://msdn.microsoft.com/en-gb/library/aa933196%28v=sql.80%29.aspx)

中设置列上的种子。

不能给Identity列赋值。其意义。

如果您想要更改标识列的起始值,为什么不通过一个简单的脚本来完成呢?

context.Database
       .ExecuteSqlCommand("ALTER TABLE Place ALTER COLUMN Id IDENTITY (1000,1)");

这将插入Place.Id作为1000,作为表中的第一行,然后是1001,1002…

让sql server生成身份。设置标识种子和标识增量的值

当列是标识时,从实体框架插入记录将引发以下错误。当IDENTITY_INSERT设置为OFF时,不能在表'MY_ENTITY'中插入标识列的显式值。为避免错误设置实体属性StoreGeneratedPattern="Identity"

  <EntityType Name="MY_ENTITY">
              <Key>
                <PropertyRef Name="UserID" />
              </Key>
              <Property Name="RecordID" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />

上述文章中提到的ExecuteSqlCommand()命令将不能像链接

中提到的那样工作。

这里提到了另一个解决方案