由于身份字段,LINQ to Entity 在插入记录时出错
LINQ to Entity Error on Inserting Records Because of Identity Field
基本上,我正在尝试使用 LINQ to Entity 向我的 table 插入一条记录。
using (MyEntities container = new MyEntities())
{
container.MyTable.AddObject(record);
container.SaveChanges();
}
现在我的问题是:我要插入的 table 有一个列 ID,它是 PK 并且是一个标识字段。在我的模型中,我确保将列的 StoreGeneratedPattern
属性 设置为 IDENTITY
。但是,当我执行 运行 我的代码时,它仍然给我错误消息:
"Cannot insert explicit value for identity column in table 'MyTable' when IDENTITY_INSERT is set to OFF."
我的模型是否缺少任何其他需要更新的属性?
谢谢!
错误似乎是因为您明确地为您的对象提供了一个 ID,并且将 StoreGeneratedPattern
设置为 IDENTITY
,这会自动生成 ID 字段(这是主键)。
您是否检查过是否为名为 record
的对象的 ID 字段分配了值?如果是这样,请尝试删除 ID 字段的分配,它将由模型在插入时分配。
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>
这应该可行,但如果您更新模型,这些更改将会丢失,您将不得不重新进行。
基本上,我正在尝试使用 LINQ to Entity 向我的 table 插入一条记录。
using (MyEntities container = new MyEntities())
{
container.MyTable.AddObject(record);
container.SaveChanges();
}
现在我的问题是:我要插入的 table 有一个列 ID,它是 PK 并且是一个标识字段。在我的模型中,我确保将列的 StoreGeneratedPattern
属性 设置为 IDENTITY
。但是,当我执行 运行 我的代码时,它仍然给我错误消息:
"Cannot insert explicit value for identity column in table 'MyTable' when IDENTITY_INSERT is set to OFF."
我的模型是否缺少任何其他需要更新的属性?
谢谢!
错误似乎是因为您明确地为您的对象提供了一个 ID,并且将 StoreGeneratedPattern
设置为 IDENTITY
,这会自动生成 ID 字段(这是主键)。
您是否检查过是否为名为 record
的对象的 ID 字段分配了值?如果是这样,请尝试删除 ID 字段的分配,它将由模型在插入时分配。
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>
这应该可行,但如果您更新模型,这些更改将会丢失,您将不得不重新进行。