在Entity Framework中导入数据后自动增加ID

时间:2016-05-24 20:06:42

标签: asp.net entity-framework

我正在使用Entity Framework 6 Code First和ASP.NET以及SQL Server 2014作为后端开发新版本的旧应用程序。旧数据库是一个Access数据库,有大约十几个具有自动增量ID的表。我想在保持ID完整的同时导入旧数据,以便保留表之间的关系。我已将新实体的关键属性设置为

DatabaseGeneratedOption.None

这很有效,而且我可以从旧数据库中导入所有值,但是我希望主键从此时开始自动递增。由于DatabaseGeneratedOption设置为None,我似乎必须在

中手动生成ID

2 个答案:

答案 0 :(得分:4)

您可能希望将密钥设置为标识,然后在导入期间禁用标识约束。

在插入语句之前使用SET IDENTITY_INSERT tablename ON执行此操作。完成后别忘了将它设置为OFF。

答案 1 :(得分: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());
    }
}