如何在Entity Framework中为标识列插入值?

时间:2013-03-24 10:52:39

标签: c# entity-framework

我在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的新手,所以请帮我解决。

4 个答案:

答案 0 :(得分:1)

您是否只想在 EF 中执行此操作以了解语法?我问的原因是因为您可以在 SSMS http://msdn.microsoft.com/en-gb/library/aa933196%28v=sql.80%29.aspx

中的列上设置种子

答案 1 :(得分:0)

您无法为Identity列指定值。它毫无意义。

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

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

这会将Place.Id作为1000插入表格中的第一行,然后插入1001,1002 ......依此类推后续行。

答案 2 :(得分:0)

让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" />

答案 3 :(得分:0)

上述帖子中提到的 ExecuteSqlCommand()命令将无效,如link

中所述

另一个解决方案是here