2017-11-22 26 views
0

EfCore 1.1を使用して、ValueGeneratedOnAddを使用して自動生成列を作成しようとしています。問題は、私は常に "0"として値を取得しているということです。私は手動でデータベーステーブルで何かをしなければならないのですか?ここでefコア1.1 ValueGeneratedOnAddを使用する自動生成列

は私のモデルは、私はそれを行う方法を考え出したが、私は本当にすべての注釈を使用せずにそれをやってみたかった、とこれは私のOnModelCreatingが

 protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Contact>() 
      .Property(c => c.ContactIndex) 
      .ValueGeneratedOnAdd(); 
      // I tried following as well but it did't work 
      // .HasDefaultValueSql("IDENTITY(int, 1,1)"); 
     ; 
    } 
+0

あなたが移行を使用するか、または既存のテーブルにマップしようとしています含める必要があり、あなたの移行や、あなたの移行を生成し、実行しますか?そして、2つのアイデンティティ列 'Id'と' ContactIndex'が必要ですか? –

+0

私は移行を使用して新しい列 "ContactIndex"を追加しました。テーブルの主キーはGUIDです。この列 "ContactIndex"は数字の列ですが、番号を自動生成する必要があります。 – ATHER

答えて

0

OKどのように見えるかです

public class Contact 
{ 
    public int Id { get; set; } 

    // This needs to be auto generated 
    public Int32 ContactIndex { get; set; } 

    public string FullName { get; set; } 
    public string Email { get; set; } 
    public DateTime LastAccessed { get; set; } 
} 

です私はまだモデル上の注釈なしでそれを行う方法を理解できません。だからここに私のソリューションです。

あなたが

public class Contact 
{ 
    public int Id { get; set; } 

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Int32 ContactIndex { get; set; } 

    public string FullName { get; set; } 
    public string Email { get; set; } 
    public DateTime LastAccessed { get; set; } 
} 

を、以下のようなあなたがモデルに提出された注釈を付けるとあなたのコンテキストクラスでOnModelCreatingを追加する必要があります。これにより、エンティティフレームワークはレコードの追加または更新中に列を無視するようになります。 .ValueGeneratedAddOrUpdate()メソッドを呼び出していることを確認してください。 .ValueGeneratedAdd()のみを使用すると、更新中にエラーが発生します。

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Contact>() 
     .Property(c => c.ContactIndex) 
     .ValueGeneratedOnAddOrUpdate(); 
    ; 
} 

「SqlServerValueGenerationStrategy.IdentityColumnは」

protected override void Up(MigrationBuilder migrationBuilder) 
{ 
    migrationBuilder.AddColumn<int>(
     name: "ContactIndex", 
     table: "Contact", 
     nullable: false, 
     defaultValue: 0) 
     .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); 
} 
関連する問題