Как сначала добавить новую таблицу в существующий код базы данных

Первоначально я использовал код EF 6 сначала для создания новой базы данных и двух новых таблиц. Код:

 public class TestingContext : DbContext, IDisposable
{
    public DbSet<CallDataRecord> CallDataRecords { get; set; }
    public DbSet<Attempt> Attempts { get; set; }

    public TestingContext()
        : base("Testing")
    {
        Database.SetInitializer<TestingContext>(new MigrateDatabaseToLatestVersion<TestingContext, GenericIVR.Migrations.Configuration>());
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Attempt>().HasRequired(t => t.CallDataRecord).WithMany(a => a.Attempts).HasForeignKey(t => t.FKTaskId);

        modelBuilder.Entity<Attempt>().Property(x => x.AttemptId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity).IsRequired();

        modelBuilder.Entity<CallDataRecord>().Property(x => x.TaskId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity).IsRequired();
    }
}

теперь моя стратегия изменилась, я не хочу новую БД. Я хочу добавить новые таблицы в существующую БД, скажем DevDB.

как изменить код? Должен ли я использовать Reverse Engineering Code First?

обновление: Строка подключения:

<connectionStrings>
<add name="Testing" connectionString="Data Source=dddd.corporate.xxxx.com; Initial Catalog=Testing; User ID=sa; Password=password; MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />

4 ответов


если у вас установлены автоматические миграции, это должно быть довольно прямо вперед.

если у вас нет, вам придется работать Enable-Migrations –EnableAutomaticMigrations Возможно, сначала прочтите здесь:http://msdn.microsoft.com/en-gb/data/jj554735.aspx

для тех, кто хочет обновить базу данных с новой таблицей (скажем, я хочу добавить таблицу UserAttachment, чтобы сидеть рядом с моей существующей пользовательской таблицей), используя код EF, сначала сделайте следующий:

с включенными автоматическими миграциями вы должны убедиться, что у вас есть...

1.) Создать новую модель, как вы считаете нужным.

2.) Создайте свой конфигурационный файл, что-то вроде:

 class UserAttachmentConfiguration : EntityTypeConfiguration<UserAttachment>
    {
        public UserAttachmentConfiguration()
            : base()
        {
            HasKey(p => p.UserId);
            ToTable("UserAttachment");    

            HasRequired(t => t.User)
                .WithOptional(t => t.UserAttachment);                
        }
    }

3.) Добавьте свой DbSet и modelBuilder данные в главной

в dbset

public DbSet<UserAttachment> UserAttachment {get; set;}

modelBuilder

modelBuilder.Configurations.Add(new UserAttachmentConfiguration());

4.) Run update-database через Visual Студия Package Manager Console, убедитесь, что вы выбрали правильный проект из выпадающего списка, это может быть .Repository названного проекта.

Ваша новая таблица должна сейчас существует в вашей базе данных.


просто создайте новую таблицу в качестве модели и добавьте ее запись в класс DbContext

что-то вроде

 public class TestingContext : DbContext, IDisposable
{
    public DbSet<CallDataRecord> CallDataRecords { get; set; }
    public DbSet<Attempt> Attempts { get; set; }

    public DbSet<MyNewModel> MyNewModels { get; set; }

затем add-migrations и update-database


У вас есть миграции настроены? Если это так, просто перенесите базу данных (add-migration blah; update-database), и она добавит только новую таблицу.

Если у вас нет миграции включены, то вы все равно должны быть в порядке с кодом выше. Он должен просто добавить таблицу при переносе.

Я набираю это с моего телефона, или я бы предоставил тест кода.


  1. включить-сначала миграция из консоли диспетчера пакетов.

  2. создать класс конфигураций, как

    namespace Demo.Data.Configurations
    {
        public class DemoConnectionConfiguration : EntityTypeConfiguration<DemoConnection>
        {
            public DemoConnectionConfiguration()
            {
                ToTable("DemoConnection");
                HasKey(a => a.Id);
            }
        }
    }
    
  3. добавить Dbset и Model Builder в контексте.в CS, как

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new DemoConnectionConfiguration());
    
        base.OnModelCreating(modelBuilder);
    }
    
    
    public DbSet<DemoConnection> DemoConnection { get; set; }
    
  4. "Update-Database" из консоли диспетчера пакетов.

Примечание: "Пожалуйста, выберите нужную папку из выпадающего списка проекта по умолчанию"

поздравление! Ваша Таблица DemoConnection сейчас находится в базе данных.