2017-05-19 4 views
0

Entity Frameworkを使用します。私はDBのテーブルに問題があります。Entity Frameworkは、プライマリキーではない列に対して自動インクリメントと開始値を設定します。

IDはGUIDで、新しいGUIDを手動で作成します。移行を追加するとき、私はこれを取得

Company { 
    private Guid id = Guid.NewGuid(); 

    [Required, Range(10000000, 999999999)] 
    [Index(IsUnique = true)] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public virtual long StakeholderNumber 
    { 
     get; 
     set; 
    } 
} 

(と思う) は、今私は自動インクリメントに新しい列を実装したいと私は大丈夫働いている列の自動インクリメントを作るために、これは100000000 で起動したいですマイグレーションファイル。

public override void Up() 
    { 
     AlterColumn("dbo.Companies", "StakeholderNumber", c => c.Long(nullable: false, identity: true)); 
     CreateIndex("dbo.Companies", "StakeholderNumber", unique: true); 
    } 

    public override void Down() 
    { 
     DropIndex("dbo.Companies", new[] { "StakeholderNumber" }); 
     AlterColumn("dbo.Companies", "StakeholderNumber", c => c.Long(nullable: false)); 
    } 

これは動作するように見えます。 しかし、私はstakeholderNumberが、他の例から100000000の代わりに、1 で開始したい、これはprimaryにstakeholdernumberを設定することで、作業して、行を追加することができます。

 Sql("DBCC CHECKIDENT ('dbo.Companies', RESEED, 100000000);"); 

しかし、私はstakeholdernumberはprimaryになりたくありません!

私はupdadte-データベースでこれを実行すると、私はこのエラーを取得する:

Companies' does not contain an identity column

SO列primaryをせずに10000000にStakeholdernumberの自動インクリメントを設定する方法はありますか?

+0

元のエンティティモデル/構成と変更されたエンティティ/構成の完全な例を表示できますか。 –

+0

実際問題は、移行が既存の列を「IDENTITY」に変更しない**ことです。 [Entity-Frameworkの更新されたDatabaseGeneratedOptionを持つエンティティの移行](http://stackoverflow.com/questions/30462749/migrate-entity-with-updated-databasegeneratedoption-inentity-framework)を参照して、いくつかのアイデアを得るそれを解決する。 –

+0

エンティティフレームワークを使用しようとするのではなく、SQLのデフォルト値をMAX + 1に設定するだけです。 –

答えて

0

私は同じ問題があり、代わりにシーケンスを使用して終了しました。シーケンスを定義してそのように使用しました。

protected override void OnModelCreating(ModelBuilder builder) 
    { 
     base.OnModelCreating(builder); 

     builder.HasSequence<int>("MySequence", schema: "shared").StartsAt(10000000).IncrementsBy(1); 

     modelBuilder.Entity<Company>() 
     .Property(o => o.StakeholderNumber) 
     .HasDefaultValueSql("NEXT VALUE FOR shared.MySequence");    
    } 

私にとっては完璧です。私はEFコア2.0を使用しています。
Ref:https://docs.microsoft.com/en-us/ef/core/modeling/relational/sequences

希望すると助かります!

関連する問題