web-dev-qa-db-ja.com

最初に既存のデータベースコードに新しいテーブルを追加する方法

もともと、EF 6コードを最初に使用して、新しいデータベースと2つの新しいテーブルを作成しました。コードは次のとおりです。

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

今、私の戦略が変更されました。新しいDBを使いたくありません。 DevDBなど、既存のDBに新しいテーブルを追加したい。

コードを変更するには? Reverse Engineering Code First?を使用する必要がありますか

PDATED:接続文字列は次のとおりです。

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

自動移行を設定している場合、これは非常に簡単です。

まだ実行していない場合は、Enable-Migrations –EnableAutomaticMigrationsを実行する必要がありますが、最初にここでさらに読み進めてください。 http://msdn.Microsoft.com/en-gb/data/jj554735.aspx =

最初にEFコードを使用して、新しいテーブルでデータベースを更新する(既存のUserテーブルと一緒に座るためにUserAttachmentテーブルを追加したい)場合は、次の手順を実行します。

自動移行を有効にすると、次のことを確認する必要があります...

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.)Visual Studioのupdate-databaseを介してPackage Manager Consoleを実行し、ドロップダウンから正しいプロジェクトを選択したことを確認します。これは、おそらく.Repository名前付きプロジェクトです。

新しいテーブルがデータベースに存在するはずです。

25
JsonStatham

新しいテーブルをモデルとして作成し、そのエントリを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

27
Anshul Nigam
  1. 最初に、パッケージマネージャーコンソールから移行を有効にします。

  2. 構成クラスを作成します

    namespace Demo.Data.Configurations
    {
        public class DemoConnectionConfiguration : EntityTypeConfiguration<DemoConnection>
        {
            public DemoConnectionConfiguration()
            {
                ToTable("DemoConnection");
                HasKey(a => a.Id);
            }
        }
    }
    
  3. Context.csにDbsetとModel Builderを追加します

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new DemoConnectionConfiguration());
    
        base.OnModelCreating(modelBuilder);
    }
    
    
    public DbSet<DemoConnection> DemoConnection { get; set; }
    
  4. Package Managerコンソールからの「データベースの更新」。

注:「デフォルトのプロジェクトドロップダウンリストから適切なフォルダーを選択してください」

おめでとうございます!現在、DemoConnectionテーブルはデータベースにあります。

0
Chetan Pandey

移行を設定していますか?その場合、データベースを移行するだけで(add-migration blah; update-database)、新しいテーブルのみが追加されます。

移行を有効にしていない場合でも、上記のコードで問題ありません。移行時にテーブルを追加するだけです。

電話から入力するか、コードテストを提供します。

0
MarkWalls