もともと、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" />
自動移行を設定している場合、これは非常に簡単です。
まだ実行していない場合は、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
名前付きプロジェクトです。
新しいテーブルがデータベースに存在するはずです。
新しいテーブルをモデルとして作成し、そのエントリを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
最初に、パッケージマネージャーコンソールから移行を有効にします。
構成クラスを作成します
namespace Demo.Data.Configurations
{
public class DemoConnectionConfiguration : EntityTypeConfiguration<DemoConnection>
{
public DemoConnectionConfiguration()
{
ToTable("DemoConnection");
HasKey(a => a.Id);
}
}
}
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; }
Package Managerコンソールからの「データベースの更新」。
注:「デフォルトのプロジェクトドロップダウンリストから適切なフォルダーを選択してください」
おめでとうございます!現在、DemoConnectionテーブルはデータベースにあります。
移行を設定していますか?その場合、データベースを移行するだけで(add-migration blah; update-database)、新しいテーブルのみが追加されます。
移行を有効にしていない場合でも、上記のコードで問題ありません。移行時にテーブルを追加するだけです。
電話から入力するか、コードテストを提供します。