倍数上下文ef-core

时间:2018-02-12 02:09:18

标签: c# .net-core ef-migrations ef-core-2.0

我正在使用EF Core,我决定拆分我正在使用的DbContexts。 一切都是正确的,但我注意到,当我为每个上下文创建迁移时,即使其他上下文先前已创建该表,EF也会尝试再次创建表。 我认为EF Core必须尝试更新表而不是尝试创建它们但我不知道为什么EF Core会这样做。

AccountsContext:

 public class AccountsContext : BaseContext<AccountContext>
 {
        public AccountContext(DbContextOptions<AccountsContext> options): base (options){}
    public DbSet<Account> Accounts { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Account>().HasKey(a => a.id);
        modelBuilder.Entity<Account>().Property(a => a.Name).HasField("_name");
        modelBuilder.Entity<Account>().Property(a => a.Role).HasField("_role");
        modelBuilder.Entity<Account>().OwnsOne(a => a.Password);
        modelBuilder.Entity<Account>().OwnsOne(a => a.Email);
    }
}

CampaignContext:

public class CampaignContext: BaseContext<CampaignContext>
{
      public CampaignContext(DbContextOptions<CampaignContext> options): base (options){}

    public DbSet<Campaign> Campaing { get; set; }
    private DbSet<Account> Accounts { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Campaing>().ToTable("Campaings");
        modelBuilder.Entity<Campaing>().HasKey(a => a.Id);
        modelBuilder.Entity<Campaing>().HasOne(c => c.Owner);
        modelBuilder.Entity<Account>().ToTable("Accounts");
  }
}

以下是广告系列环境中迁移的支架。 EF Core看起来就像尝试创建帐户表一样,即使它已经存在于数据库中。

enter image description here enter image description here

2 个答案:

答案 0 :(得分:0)

您应该通过

指定要使用的上下文

dotnet ef Update Database -Context DbContext

答案 1 :(得分:0)

Ef核心中的每个上下文都被视为一个单独的数据库,因此您将该表放在两个数据库中,我不知道为什么要这样做,但是在两个迁移中都可以看到该表是正常的