Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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# EF Core将负序列号指定给自动递增整数字段_C#_Sql Server_Entity Framework Core - Fatal编程技术网

C# EF Core将负序列号指定给自动递增整数字段

C# EF Core将负序列号指定给自动递增整数字段,c#,sql-server,entity-framework-core,C#,Sql Server,Entity Framework Core,当调用上下文上的Attach方法将对象附加到上下文时,应将负序列号临时指定给Identity属性。在我的例子中,该值似乎是永久的,最终将对象保存到数据库时会导致错误 public virtual void Insert(TEntity entity) { entity.ObjectState = ObjectState.Added; _dbSet.Attach(entity); _context.SyncObjectState<TE

当调用上下文上的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; }
}
公共虚拟空白插入(TEntity实体)
{
entity.ObjectState=ObjectState.Added;
_附加数据集(实体);
_SyncObjectState(实体);
}
公共类层:实体
{
公共层()
{
}
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int TierID{get;set;}
公共字符串CountryID{get;set;}
公共字符串TierName{get;set;}
public int TierNo{get;set;}
公共虚拟ICollection管理结构{get;set;}
公共国家{get;set;}
}

我正在将Entityframework core 1.1.0与MSSQL Server 2016一起使用。如果您创建了一个具有如下属性的类,并且不给它任何输入,则整数将具有以下值:

0

代码:

正如你所看到的,我没有操纵任何事情。值为零,
0
,是Int中的默认值。您说过您使用
TierID
作为主键值。您的表是否知道如何处理这个问题,比如它会给它一个ID,或者您需要给它一个ID?也许这就是错误发生的地方。主键错误

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

尝试:


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

0

代码:

正如你所看到的,我没有操纵任何事情。值为零,
0
,是Int中的默认值。您说过您使用
TierID
作为主键值。您的表是否知道如何处理这个问题,比如它会给它一个ID,或者您需要给它一个ID?也许这就是错误发生的地方。主键错误

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

尝试:


什么是“Tier”?请阅读并提供一个。定义“random”-每次都是相同的“random”数字,还是每个
Tier
的实例化都有不同的数字?每次都有不同的数字,而且总是否定的。为什么不在setter上放一个断点,并检查哪个方法/线程(查看堆栈跟踪)更新你的TierId?什么是“Tier”类型?请阅读并提供一个。定义“random”-每次都是相同的“random”数字,还是每个
Tier
的实例化都有不同的数字?每次都有不同的数字,而且总是否定的。为什么不在setter上放一个断点,然后检查哪个方法/线程(查找stacktrace)更新你的TierId?我不需要提供任何ID。数据库可以提供。但我想我已经能够检测到问题的来源。我使用了一个存储库模式框架(URF),做了一些小的修改,以便它可以与dotnet core一起工作,这一行就是造成问题的原因“public virtual void SyncObjectState(tenty entity),其中tenty:class,IObjectState{Entry(entity).State=stateheloper.ConvertState(entity.ObjectState);}”这一行出现的某些情况似乎只影响“TierID”"把它改成负数,我一点也不知道发生了什么事。如果你能帮我解决这个问题,我可以把我的图书馆版本发给你。是的。好的,谢谢你的回答。你看看几年前@Tazbir Bhuiyan找到的解决方案怎么样。我按照你提供的链接中的例子,但它不起作用希望使用当前日期和时间(以微秒为单位)生成一个由8个字符组成的唯一字符串,用作TierID,并且忘记使用int类型和自动增量功能。你能帮我吗?我不需要提供任何ID。数据库会提供。但我想我已经能够检测到问题的来源。我使用了一个存储库模式框架(URF),做了一些小的修改,使其能够与dotnet core一起工作,这里的一行是造成问题的原因“公共虚拟void SyncObjectState(TEntity entity),其中TEntity:class,IOObjectState{Entry(entity).State=StateHelper.ConvertState(entity.ObjectState);}”在这条线上发生的事情似乎只影响到“TierID”把它改成负数,我一点也不知道发生了什么事。如果你能帮我解决这个问题,我可以把我的图书馆版本发给你。是的。好的,谢谢你的回答。你看看几年前@Tazbir Bhuiyan找到的解决方案怎么样。我按照你提供的链接中的例子,但它不起作用希望使用当前日期和时间(以微秒为单位)生成一个由8个字符组成的唯一字符串,用作TierID,并且忘记使用int类型和自动增量功能。您能帮助我吗
class Program
{   
  static void Main(string[] args)
  {
      tmpClass testClass = new tmpClass();
      Debug.WriteLine(testClass.IntTest);


  }

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