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

Сначала я использовал код 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" />

Ответ 1

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

Если вы этого не сделали, вам нужно запустить 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 в основной файл Context.cs

DbSet

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

MODELBUILDER

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

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

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

Ответ 2

Просто создайте новую таблицу в качестве модели и добавьте ее в класс 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

Ответ 3

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

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

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

Ответ 4

  • Включить-Перенос из консоли диспетчера пакетов.

  • Создать класс конфигурации, например

    namespace Demo.Data.Configurations
    {
        public class DemoConnectionConfiguration : EntityTypeConfiguration<DemoConnection>
        {
            public DemoConnectionConfiguration()
            {
                ToTable("DemoConnection");
                HasKey(a => a.Id);
            }
        }
    }
    
  • Добавьте Dbset и Model Builder в Context.cs, например

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new DemoConnectionConfiguration());
    
        base.OnModelCreating(modelBuilder);
    }
    
    
    public DbSet<DemoConnection> DemoConnection { get; set; }
    
  • "Обновить базу данных" из консоли диспетчера пакетов.

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

Поздравляем! Ваша таблица DemoConnection теперь находится в базе данных.