Как сначала добавить новую таблицу в существующий код базы данных
Первоначально я использовал код 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), и она добавит только новую таблицу.
Если у вас нет миграции включены, то вы все равно должны быть в порядке с кодом выше. Он должен просто добавить таблицу при переносе.
Я набираю это с моего телефона, или я бы предоставил тест кода.
включить-сначала миграция из консоли диспетчера пакетов.
-
создать класс конфигураций, как
namespace Demo.Data.Configurations { public class DemoConnectionConfiguration : EntityTypeConfiguration<DemoConnection> { public DemoConnectionConfiguration() { ToTable("DemoConnection"); HasKey(a => a.Id); } } }
-
добавить Dbset и Model Builder в контексте.в CS, как
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new DemoConnectionConfiguration()); base.OnModelCreating(modelBuilder); } public DbSet<DemoConnection> DemoConnection { get; set; }
"Update-Database" из консоли диспетчера пакетов.
Примечание: "Пожалуйста, выберите нужную папку из выпадающего списка проекта по умолчанию"
поздравление! Ваша Таблица DemoConnection сейчас находится в базе данных.