如何在实体框架中插入标识列的值
本文关键字:标识 插入 实体 框架 | 更新日期: 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()命令将不能像链接
中提到的那样工作。这里提到了另一个解决方案