EFT CTP5 Отключить столбец идентификаторов при вставке - PullRequest
1 голос
/ 28 февраля 2011

У меня есть база данных, которую я хотел бы перенести в EF CTP5.У меня проблема в том, что когда я вставляю существующие данные, мне нужно переместить их, сохраняя первичный ключ текущего идентификатора для других ограничений внешнего ключа.

Я хотел бы перенести это, используя код EF CTP5, поэтому у меня нетнаписать много SQL или даже содержать его в пакете служб SSIS.

Я попытался использовать синтаксис sql:

SET IDENTITY_INSERT tableName ON

SET IDENTITY_INSERT tableName OFF *

Однако, когда вызывается DbContext.SaveChanges (), вышеуказанный синтаксис происходит в другом соединении, а столбец идентификаторов управляется инфраструктурой EF CTP5, даже когда указывается идентификатор.

Есть лиспособ отключения или удаления соглашения об идентификации для объекта, аналогичного следующему, но на лету, а не при создании экземпляра базы данных:

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 Ответ

5 голосов
/ 23 марта 2011

Вы можете добавить параметр Identity в поле следующим образом:

В вашем OnModelCreating в вашем классе DbContext:

    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);
    }
...