EF Core为自动增量int字段分配负序号

时间:2017-01-06 07:18:53

标签: c# sql-server entity-framework-core

当调用上下文中的Attach方法将对象附加到上下文时,应该将负序号临时分配给Identity属性。在我的情况下,该值似乎是永久性的,最终将对象保存到数据库时会出错。

 public virtual void Insert(TEntity entity)
    {
        entity.ObjectState = ObjectState.Added;
        _dbSet.Attach(entity);
        _context.SyncObjectState<TEntity>(entity);
    }

 public class Tier:Entity
{
    public Tier()
    {

    }
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int TierID { get; set; }
    public string CountryID { get; set; }
    public string TierName { get; set; }
    public int TierNo { get; set; }

    public virtual ICollection<AdministrativeStructure> AdministrativeStructures { get; set; }

    public Country Country { get; set; }
}

我正在使用Entityframework核心1.1.0和MSSQL Server 2016

1 个答案:

答案 0 :(得分:2)

让我们看看。如果你创建一个具有这样的属性的类并且不给它任何输入,那么整数将具有以下值:

0

代码:

class Program
{   
  static void Main(string[] args)
  {
      tmpClass testClass = new tmpClass();
      Debug.WriteLine(testClass.IntTest);


  }

  public class tmpClass
  {
      public int IntTest { get; set; }
  }
}

你可以看到我没有操纵任何东西。值为零,0,来自Int的默认值。您说您使用TierID作为主键值。你的表是否知道如何处理这个问题,比如它会给它一个ID,还是你需要给它一个ID?也许是错误发生的地方。错误的主键。

在您的情况下,似乎数据库生成似乎无法正常工作。

MSDN Documentation

尝试:

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int TierId { get; set; }