我正在使用Entity Framework 6 Code First和ASP.NET以及SQL Server 2014作为后端开发新版本的旧应用程序。旧数据库是一个Access数据库,有大约十几个具有自动增量ID的表。我想在保持ID完整的同时导入旧数据,以便保留表之间的关系。我已将新实体的关键属性设置为
DatabaseGeneratedOption.None
这很有效,而且我可以从旧数据库中导入所有值,但是我希望主键从此时开始自动递增。由于DatabaseGeneratedOption设置为None,我似乎必须在
中手动生成ID答案 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());
}
}