EF Coreは、負のシーケンス番号を自動インクリメントintフィールドに割り当てます

c# entity-framework-core sql-server

質問

コンテキスト上の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; }
}

私はMSSQL Server 2016でEntityframeworkコア1.1.0を使用しています

人気のある回答

どれどれ。このようなプロパティを持つクラスを作成し、それに入力を与えない場合、Integerは次の値を持ちます:

0

コード:

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


  }

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

ご覧のとおり、私は何も操作しませんでした。値ist 0 、Intのデフォルト値。 TierIDを主キー値として使用すると言っています。あなたのテーブルはこれを処理する方法を知っていますか?それはIDを与えるか、IDを与える必要がありますか?たぶんエラーが発生する場所。間違った主キー。

あなたのケースでは、データベース生成が正しく機能していないようです。

MSDNドキュメント

試してください:

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


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ