如何先向现有数据库添加新表代码

问题描述 投票:0回答:4

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

entity-framework ef-code-first
4个回答
44
投票

只需将新表创建为模型并将其条目添加到 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-migration
update-database


33
投票

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

如果还没有,则需要运行

Enable-Migrations –EnableAutomaticMigrations
也许先在这里进一步阅读:http://msdn.microsoft.com/en-gb/data/jj554735.aspx

对于任何希望首先使用 EF 代码使用新表更新数据库的人(假设我想添加一个 UserAttachment 表与现有的 User 表并排),请执行以下操作:

启用自动迁移后,您应该确保...

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
数据

数据库集

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

模型构建器

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

4.) 通过 Visual Studio 的

update-database
运行
Package Manager Console
,确保您从下拉列表中选择了正确的项目,这可能是一个
.Repository
命名项目。

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


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

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

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


0
投票

使用以下两个命令。

添加迁移种子[您的数据库名称]表 更新数据库

© www.soinside.com 2019 - 2024. All rights reserved.