实体框架IDENTITY_INSERT

时间:2011-01-12 13:04:06

标签: c# entity-framework

数据库中的“类别”表定义如下:

CategoryID - PK ,identity specification ON  (only this column has identity)   
Description  
Title  

我想插入新数据:

Category cat = new Category
{
    Description = "xxx",
    Title = "yyy",
};
if (cat.EntityState == EntityState.Detached)
{
   Articlerctx.AddToCategories(cat);
}
return Articlerctx.SaveChanges();

我收到错误:

  

无法插入显式值   表'类别'中的标识列   当IDENTITY_INSERT设置为OFF时。

但我没有插入CategoryID!我希望它能获得自动价值!

3 个答案:

答案 0 :(得分:5)

您的映射是错误的。 StoreGeneratedPattern 上的CategoryID 应设置为Identity,但您将其设置为None。解决了这个问题。

答案 1 :(得分:4)

您的方案在我的情况下运行正常 - 使用EF4。

检查以下事项:

  • 您是否在第一次创建实体模型后更改了数据库模型,如果是这样,您真的更新了实体模型吗?

  • 在那个时间点你的cat.EntityState真的是detached吗?在我的情况下,当使用带有ObjectContext的EF4时,它是Added。在这种情况下,您不会将新的Cat对象添加到类别集合中。

答案 2 :(得分:0)

确保“类别”表具有“身份列”。 尝试仅在实体中添加一个对象,然后保存。

尝试一下。

Articlerctx.Category.Add(cat);
Articlerctx.SaveChanges();

如果您的函数可以等待,您也可以使用await SaveChangesAsync();