最初我首先使用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" />
答案 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-migrations
和update-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
文件中添加modelBuilder
和Context.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)
首先从包管理器控制台启用迁移。
创建配置类,如
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表现在位于数据库中。