我有一个现有的数据库,我想迁移到EF CTP5。我遇到的问题是,当我插入现有数据时,我需要它来移动保留当前身份主键以用于其他外键约束。
我想使用EF CTP5代码迁移它,所以我不必编写大量SQL,甚至不能在SSIS包中包含它。
我试图使用sql语法:
SET IDENTITY_INSERT tableName ON
SET IDENTITY_INSERT tableName OFF
但是,当调用DbContext.SaveChanges()时,上述语法在不同的连接中发生,并且标识列由EF CTP5框架控制,即使在指定ID时也是如此。
是否有一种方法可以禁用或删除与以下内容类似的对象的身份约定,但是在实例化时,而不是在实例化数据库时:
public class BlogContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<StoreGeneratedIdentityKeyConvention>();
}
}
由于
答案 0 :(得分:5)
您可以在字段上添加标识设置,如下所示:
在DbContext类的OnModelCreating中:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ClassNameOfYourPOCO>().Property(p => p.IDFIELDNAME)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
}
你可以像这样删除它:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ClassNameOfYourPOCO>().Property(p => p.IDFIELDNAME)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}