Ursprünglich verwendete ich EF 6-Code, um eine neue Datenbank und zwei neue Tabellen zu erstellen. Der Code lautet:
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();
}
}
Jetzt ist meine Strategie geändert worden, ich möchte keine neue DB. Ich möchte die neuen Tabellen zu einer vorhandenen Datenbank hinzufügen, beispielsweise DevDB
.
Wie kann ich den Code ändern? Muss ich Reverse Engineering Code First?
verwenden?
UPDATED: .__ Die Verbindungszeichenfolge lautet:
<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" />
Wenn Sie automatische Migrationen eingerichtet haben, sollte dies recht einfach sein.
Wenn Sie dies nicht getan haben, müssen Sie Enable-Migrations –EnableAutomaticMigrations
.__ ausführen. Vielleicht sollten Sie jedoch zuerst noch etwas lesen: http://msdn.Microsoft.com/de-de/data/jj554735.aspx
Für jeden, der eine Datenbank mit einer neuen Tabelle aktualisieren möchte (beispielsweise, ich möchte eine UserAttachment-Tabelle hinzufügen, die sich neben meine vorhandene User-Tabelle befindet), wird zunächst EF-Code verwendet:
Wenn die automatischen Migrationen aktiviert sind, sollten Sie sicherstellen, dass Sie ...
1.) Erstellen Sie Ihr neues Modell nach Ihren Wünschen.
2.) Erstellen Sie Ihre Konfigurationsdatei, etwa wie folgt:
class UserAttachmentConfiguration : EntityTypeConfiguration<UserAttachment>
{
public UserAttachmentConfiguration()
: base()
{
HasKey(p => p.UserId);
ToTable("UserAttachment");
HasRequired(t => t.User)
.WithOptional(t => t.UserAttachment);
}
}
3.) Fügen Sie Ihre DbSet
- und modelBuilder
-Daten in Ihre Context.cs
-Hauptdatei ein
DbSet
public DbSet<UserAttachment> UserAttachment {get; set;}
modelBuilder
modelBuilder.Configurations.Add(new UserAttachmentConfiguration());
4.) Führen Sie update-database
über Package Manager Console
von Visual Studio aus. Stellen Sie sicher, dass Sie das richtige Projekt aus der Dropdown-Liste ausgewählt haben. Dies ist wahrscheinlich ein .Repository
-benanntes Projekt.
Ihre neue Tabelle sollte jetzt vorhanden in Ihrer Datenbank vorhanden sein.
Erstellen Sie einfach Ihre neue Tabelle als Modell und fügen Sie ihren Eintrag in der DbContext-Klasse hinzu
so etwas wie
public class TestingContext : DbContext, IDisposable
{
public DbSet<CallDataRecord> CallDataRecords { get; set; }
public DbSet<Attempt> Attempts { get; set; }
public DbSet<MyNewModel> MyNewModels { get; set; }
Dann add-migrations
und update-database
Aktivieren Sie Migrationen zuerst über die Paket-Manager-Konsole.
Erstellen Sie Konfigurationen wie
namespace Demo.Data.Configurations
{
public class DemoConnectionConfiguration : EntityTypeConfiguration<DemoConnection>
{
public DemoConnectionConfiguration()
{
ToTable("DemoConnection");
HasKey(a => a.Id);
}
}
}
Fügen Sie Dbset und Model Builder in Context.cs hinzu
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new DemoConnectionConfiguration());
base.OnModelCreating(modelBuilder);
}
public DbSet<DemoConnection> DemoConnection { get; set; }
"Update-Datenbank" aus der Package Manager Console.
Hinweis: "Bitte wählen Sie den richtigen Ordner aus der Dropdown-Liste" Default Project "aus."
Glückwunsch! Ihre DemoConnection-Tabelle befindet sich jetzt in der Datenbank.
Haben Sie Migrationen eingerichtet? Wenn ja, dann migrieren Sie einfach die Datenbank (add-migration blah; update-database) und fügt nur die neue Tabelle hinzu.
Wenn Sie keine Migrationen aktiviert haben, sollten Sie dennoch mit dem obigen Code einverstanden sein. Es sollte nur die Tabelle hinzufügen, wenn es migriert wird.
Ich schreibe dies von meinem Telefon oder würde einen Codetest durchführen.