2016-05-24 4 views
2

Entity Framework 6 Code FirstとSQL Server 2014をバックエンドとして使用するASP.NETを使用して、新しいバージョンの古いアプリケーションを開発しています。古いデータベースはAccessデータベースで、自動インクリメントIDを持つ約12のテーブルがあります。私は、テーブル間の関係が保持されるようにIDをそのまま維持しながら、古いデータをインポートしたい。私はEntity Frameworkでデータをインポートした後のIDの自動インクリメント

DatabaseGeneratedOption.None 

この作品に新しいエンティティのキ​​ー属性を設定した、と私は、しかし、私は主キーを持っているしたいのですが、古いデータベースからすべての値をインポートすることができるよ自動この時点からの増分。 DatabaseGeneratedOptionがNoneに設定されているため、手動でIDを生成する必要があると思われます。

+1

私のミスを役に立てば幸い。 Visual Studio 2015でSQL Server 2014を実行します。 – Nse

+0

エンティティが付いたEFに新しいエンティティを追加できます。 1つの 'SaveChanges'アクションでこれを行うと、EFは自動的に生成されたId値をFK値として使用します。もちろん、これは、データベースが大きすぎない場合、または明確に異なるセットでデータをコピーできる場合にのみ実行可能です。 –

答えて

4

キーをそのままIDとして設定してから、インポート時にID制約を無効にすることをお勧めします。

これは、挿入ステートメントの前にSET IDENTITY_INSERT tablename ONで行います。あなたが終わったらそれをOFFにすることを忘れないでください。

+0

Entity Frameworkコードファースト(つまり、NewClient.ID = reader( "ClientID"))を使用してインポートしていました。 Entity Frameworkを使用してこれを行う方法はありますか、SQLコマンドを使用してスクリプトを作成する必要がありますか?私はSQLコマンドを使っても問題ないですが、コードの一部をリファクタリングする必要があります。 – Nse

+1

@Nse移行でSQLを実行するのは簡単です: 'Sql(" SET IDENTITY_INSERT tablename ON ")'。また、作成された列をIDENTITYに変更すると予想されるほど単純ではない可能性があることに注意してください。http://stackoverflow.com/a/18917348/150342 – Colin

+0

@Mattiasありがとうございました。 – Nse

0

私はこれを試したことがないが、あなたは異なる構成を有するとの要件/環境ごとにそれらを切り替えることができますが、これは

public class IdentityDbConfiguration : EntityTypeConfiguration<Foo> 
{ 
    public IdentityDbConfiguration() 
    { 
     Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 
    } 
} 

public class DbConfiguration : EntityTypeConfiguration<Foo> 
{ 
    public DbConfiguration() 
    { 
     Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 
    } 
} 

public class AppContext : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Configurations.Add(new IdentityDbConfiguration()); 
    } 
} 

public class AppContext2 : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Configurations.Add(new DbConfiguration()); 
    } 
} 
関連する問題