web-dev-qa-db-fra.com

Comment ajouter d'abord une nouvelle table au code de la base de données existante

A l'origine, j'avais d'abord utilisé le code EF 6 pour créer une nouvelle base de données et deux nouvelles tables. Le code est:

 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();
    }
}

Maintenant que ma stratégie a changé, je ne veux pas de nouvelle base de données. Je veux ajouter les nouvelles tables à une base de données existante, disons DevDB.

Comment changer le code? DO je dois utiliser Reverse Engineering Code First? 

UPDATED: La chaîne de connexion est:

<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" />

20
user1108948

Si vous avez configuré les migrations automatiques, cela devrait être assez simple.

Si vous ne l'avez pas déjà fait, vous devrez exécuter Enable-Migrations –EnableAutomaticMigrations Peut-être que vous voudrez peut-être approfondir la lecture ici: http://msdn.Microsoft.com/en-gb/data/jj554735.aspx

Pour ceux qui cherchent à mettre à jour une base de données avec une nouvelle table (par exemple, je veux ajouter une table UserAttachment à côté de ma table User existante) en utilisant d'abord le code EF, procédez comme suit:

Avec les migrations automatiques activées, vous devez vous assurer d'avoir ...

1.) Créez votre nouveau modèle comme bon vous semble.

2.) Créez votre fichier de configuration, quelque chose comme:

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

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

3.) Ajoutez vos données DbSet et modelBuilder dans votre fichier Context.cs principal

DbSet

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

modelBuilder

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

4.) Exécutez update-database via le Package Manager Console de Visual Studio et assurez-vous que vous avez sélectionné le bon projet dans le menu déroulant. Il s’agit probablement d’un projet nommé .Repository.

Votre nouvelle table devrait maintenant exister dans votre base de données.

21
JsonStatham

Créez simplement votre nouvelle table en tant que modèle et ajoutez son entrée dans la classe DbContext 

quelque chose comme 

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

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

Puis add-migrations et update-database

23
Anshul Nigam
  1. Activez d'abord les migrations à partir de la console du gestionnaire de packages.

  2. Créer une classe de configuration comme

    namespace Demo.Data.Configurations
    {
        public class DemoConnectionConfiguration : EntityTypeConfiguration<DemoConnection>
        {
            public DemoConnectionConfiguration()
            {
                ToTable("DemoConnection");
                HasKey(a => a.Id);
            }
        }
    }
    
  3. Ajouter Dbset et Model Builder dans Context.cs comme 

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new DemoConnectionConfiguration());
    
        base.OnModelCreating(modelBuilder);
    }
    
    
    public DbSet<DemoConnection> DemoConnection { get; set; }
    
  4. "Update-Database" de la console du gestionnaire de package.

Remarque: "Veuillez sélectionner le bon dossier dans la liste déroulante Projet par défaut"

Félicitation! Votre table DemoConnection est maintenant dans la base de données.

0
Chetan Pandey

Avez-vous mis en place des migrations? Si tel est le cas, il vous suffit de migrer la base de données (add-migration blah; update-database) pour que la nouvelle table soit ajoutée.

Si les migrations ne sont pas activées, le code ci-dessus devrait vous convenir. Il convient simplement d'ajouter la table lors de la migration.

Je tape ceci à partir de mon téléphone ou je voudrais fournir un test de code.

0
MarkWalls