最初我首先使用 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" />
只需将新表创建为模型并将其条目添加到 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
如果您设置了自动迁移,这应该非常简单。
如果还没有,则需要运行
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
命名项目。
您的新表应该现在存在在您的数据库中。
首先从包管理器控制台启用迁移。
创建配置类,例如
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; }
来自包管理器控制台的“更新数据库”。
注意:“请从默认项目下拉列表中选择正确的文件夹”
恭喜!您的 DemoConnection 表现在位于数据库中。
使用以下两个命令。
添加迁移种子[您的数据库名称]表 更新数据库