Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架错误:无法在表中插入标识列的显式值_C#_Sql_Entity Framework - Fatal编程技术网

C# 实体框架错误:无法在表中插入标识列的显式值

C# 实体框架错误:无法在表中插入标识列的显式值,c#,sql,entity-framework,C#,Sql,Entity Framework,我在EF上发现了这个错误 无法在表中插入标识列的显式值 当IDENTITY\u INSERT设置为OFF时为“GroupMembers\u New” Db上的列是identity increment,EF设计文件中的StoreGeneratedPattern也是identity。似乎每次我尝试保存时EF都在尝试插入0 一些建议说ID保留在表上,或者删除表并重新运行脚本 有什么想法吗 下面是一些代码: GroupMember groupMember = new GroupMember();

我在EF上发现了这个错误

无法在表中插入标识列的显式值 当IDENTITY\u INSERT设置为OFF时为“GroupMembers\u New”

Db上的列是identity increment,EF设计文件中的
StoreGeneratedPattern
也是
identity
。似乎每次我尝试保存时EF都在尝试插入0

一些建议说ID保留在表上,或者删除表并重新运行脚本

有什么想法吗

下面是一些代码:

GroupMember groupMember = new GroupMember();
            groupMember.GroupId = group.Id;
            groupMember.UserId = (new UserId(group.Owner));
            //groupMember.Id = _groupContext.GroupMembers.Count();
            group.GroupMembers.Add(groupMember);

            _groupContext.SaveChanges();


我以前遇到过这个问题。此错误意味着您试图将值显式分配给数据库自动分配的列

建议: 更新edmx文件以反映您在数据库中所做的任何更改。 如果数据库自动分配该值,您应该在该属性下的设计器文件中看到“IsDbGenerated=true”属性。如果不存在,可以手动添加。

尝试以下操作:

using System.ComponentModel.DataAnnotations.Schema;
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public decimal Identity_Col { get; set; }

实体框架类文件将这些代码行添加到标识列。

在EF 6中,模型中的字段/列有一个属性用于执行此操作: StoreGeneratedPattern

在属性下拉列表中将其设置为“标识”

(我不知道EF 4。上面的答案,使用IsDbGenerated,似乎是针对EF 4的。)

这在底层XML中对应于元素的一个属性:

<Property Name="MyTableId" Type="int" Nullable="false" StoreGeneratedPattern="Identity" />

--但是您不需要手动处理XML,因为您可以使用设计器

这是怎么搞砸的还不清楚。即使在从数据库中刷新模型后,我也遇到了这个问题。如果在已经生成模型之后在表上设置PK或更改其名称,可能会感到困惑。(我使用的是表/数据库优先的方法,而不是代码优先。)


您不能使用上述将C#属性放在实体代码上的方法,因为在这种情况下,实体代码是由EF生成的。EF应该理解(“自身”)字段是一个标识。

将这些属性放在标识属性的顶部:

[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }

谷歌的第一个匹配,下面是我的解决方案:

EF代码优先:由于自动递增的PK“id”字段和guid列,设计如下:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid FileToken { get; set; }
有一个重复的身份。我把它改成:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
[DefaultValue("newid()")]
public Guid FileToken { get; set; }
问题就解决了

希望对你有帮助


Erik

我的应用程序中有这个问题;并修复了将id字段的属性“StoredGeneratedPattern”更改为Identity的问题


因此,请转到模型;找桌子;单击主键字段的属性;并更改属性。

我在AspNetCore 2.x应用程序中遇到了相同的问题和错误消息。 解决此问题的唯一方法是删除DbContext类的ModelBuilder.Entity方法中的这一行:

// remove: entity.Property(e => e.Id).ValueGeneratedNever();

请参见历史记录表上的StartTime和EndTime列,以及rowversion列。

好的,您需要为ID指定一个值,例如,对于对象Auto,只需VarAuto.ID=0

之后,您可以这样做=>

using( MyContext db = new MyContext()){

db.Autos.Add(VarAuto);
db.SaveChanges();
}
这就是解决方案,只要给id赋值,EF就可以识别表中的标识值


试试看。

我通过删除模型中插入数据的主键解决了这个问题。因为主键自动递增

var book = new Book
   {
   //   Id = 1,  //Don't need to write this
        Genre = "Technology",
        Author = "Charles Petzold",
        Title = "Programming Windows 5th Edition",
        Price = 30,
        Publisher = "Microsoft Press"
    };

  _unitOfWork.Books.Add(book);
       

事实上,更新edmx是解决方案。谢谢您在ef5中,在edmx designer中,有一个名为“StoreGeneratedPatern”的字段属性,将其设置为“Identity”,这似乎不适用于Azure移动服务。我有一个模型,它是一个字段:[Index(IsClustered=true)][DatabaseGeneratedOption(DatabaseGeneratedOption.Identity)][TableColumnAttribute(TableColumnType.CreatedAt)]公共DateTimeOffset?CreatedAt{get;set;}我添加了这个属性,现在我得到了这个错误:“ReferentialConstraint中的依赖属性映射到存储生成的列”首先,我有一个带有复合键的表,其中一列是Identity。添加属性
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
对我很有效。但这也会生成id。如果我想自己指定值并将其用作表的主键,该怎么办?首先使用EF核心代码,我有一个带有复合键的表,其中一列是Identity。添加属性
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
对我很有效。首先使用EF核心代码,我有一个带有复合键的表,其中一列是Identity。添加属性
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
对我很有效。看到了吗:哇,你救了我一天!这其实就是问题所在。。。自动脚手架确实产生了这条线,并造成了这样的麻烦!