如何首先将新表添加到现有数据库代码中

时间:2014-05-14 18:49:42

标签: entity-framework ef-code-first

最初我首先使用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" />

4 个答案:

答案 0 :(得分:25)

只需将新表创建为模型,并在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-migrationsupdate-database

答案 1 :(得分:21)

如果您设置了自动迁移,则应该非常简单。

如果还没有,则需要运行Enable-Migrations –EnableAutomaticMigrations 或许可以先在这里进一步阅读:http://msdn.microsoft.com/en-gb/data/jj554735.aspx

对于任何想要使用新代码更新数据库的人(比如我想在我的现有用户表中添加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文件中添加modelBuilderContext.cs数据

<强> DbSet

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

<强>模型构建器

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

4.。)通过Visual Studio的update-database运行Package Manager Console,确保从下拉列表中选择了正确的项目,这可能是.Repository命名的项目。

您的新表格应该现在在您的数据库中。

答案 2 :(得分:0)

您是否设置了迁移?如果是这样,那么只需迁移数据库(add-migration blah; update-database),它只会添加新表。

如果您没有启用迁移,那么您仍然可以使用上面的代码。它应该在迁移时添加表。

我正在通过手机输入此内容,或者我会提供代码测试。

答案 3 :(得分:0)

  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. 从包管理器控制台
  5. “更新数据库”。

  6. 注意:“请从默认项目下拉列表中选择正确的文件夹”

    恭喜!您的DemoConnection表现在位于数据库中。