Как сначала добавить новую таблицу в существующий код базы данных
Сначала я использовал код 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 теперь находится в базе данных.