How to exclude one table from automatic code first migrations in the Entity Framework?

后端 未结 5 1351
我寻月下人不归
我寻月下人不归 2020-12-16 05:32

I\'m using the Entity Framework in the Code First mode with automatic migrations enabled. Now, I have one entity whose table should not be managed (migrated) by the

相关标签:
5条回答
  • 2020-12-16 05:59

    You want to use the [NotMapped] annotation on that class/entity.

    0 讨论(0)
  • 2020-12-16 06:00

    This is now possible in EF Core 5.0 using the ExcludeFromMigrations() method, but strangely enough you have to call the ToTable() method and then use the TableBuilder.

    https://devblogs.microsoft.com/dotnet/announcing-entity-framework-core-efcore-5-0-rc1/#exclude-tables-from-migrations

    public class ReportingContext : DbContext
    {
        public DbSet<User> Users { get; set; }
    
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<User>().ToTable(nameof(Users), t => t.ExcludeFromMigrations());
        }
    }
    
    0 讨论(0)
  • 2020-12-16 06:04

    Not sure if this is the OP's exact scenario, but I had a table that I did not want a migration generated for. I accomplished this by using ToView instead of ToTable within the DbContext:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
    
        modelBuilder.Entity<MyTable>(entity => {
            // Migration will not be generated for this table
            entity.ToView("MyTable", "dbo");
    
            entity.Property(e => e.FooBar).HasColumnType("DECIMAL(19,9)");
        });
    }
    

    It feels a bit hacky to me, but maybe it's not -- because, after all, I'm just trying to "view" the table, not write to it...

    [Tested with .NET Core EF 3.1.3]

    0 讨论(0)
  • 2020-12-16 06:05

    My TEMPORARY solution, only for dev environments. I have a separate script that runs migration and program run does not check them. So in unexpected case I was possible to invoke Ignore<ContactView>() and run migrations with this line. When it was completed, I removed this line!

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            // comment out this code after migrations are done
            modelBuilder.Ignore<ContactView>();
        }
    
    0 讨论(0)
  • 2020-12-16 06:26

    It is possible by using another DbContext to access the table in question. Migrations are bound to one DbContext (see Is it possible to have automatic migrations for one DbContext and not for another in the same project?).

    0 讨论(0)
提交回复
热议问题