EFT CTP5在插入时禁用标识列

时间:2011-02-28 13:13:16

标签: entity-framework-ctp5

我有一个现有的数据库,我想迁移到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>();
    }
}

由于

1 个答案:

答案 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);
    }