我正在使用Code First方法的现有数据库。
我将使用数据库中的所有新表,除了我需要使用的一个现有表。我只希望能够读取此表,如果我调用update-database,则不会发生任何更改。我将如何解决这个问题?
如果我使用类似下面的代码那么它完全被排除在上下文之外但如果我在OnModelCreating中删除了忽略行,那么我遇到了update-database命令的问题,因为它已经存在于db中(和我一样)提到,我不想随时更新此表)
public class DBContext : IdentityDbContext<ApplicationUser>
{
public DBContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public DbSet<person> Persons { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Ignore<person>();
}
public static DBContext Create()
{
return new DBContext();
}
}
答案 0 :(得分:1)
我将代码更改为如下所示
public class DBContext : IdentityDbContext<ApplicationUser>
{
public DBContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
//public DbSet<person> Persons { get; set; }
public DbQuery<person> Persons
{
get
{
// Don't track changes to query results
return Set<person>().AsNoTracking();
}
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<person>();
}
public static DBContext Create()
{
return new DBContext();
}
}
*请注意,我的迁移已在此时启用
然后我收到错误“数据库中已经有一个名为'person'的对象。”
然后跑 PM&GT;添加迁移FirstMigration
执行此操作后,删除迁移脚本中的创建和删除表
运行 PM&GT;更新数据库 现在应该可以了。
我使用本文中的信息修复了所有这些:https://blog.rajsoftware.com/2014/07/12/entity-framework-code-first-automatic-migration-existing-tables/