4

Мы используем EntityFramework кода первого Я хочу реализовать наследование DbContext как:DbContext наследование ошибка обновления-базы данных

public class AgileDbContextBase : DbContext 
{ 
    public DbSet<Account> Accounts { get; set; } 
    public DbSet<User> Users { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     // base.OnModelCreating(modelBuilder); 
     // TODO configure relations here! 
     modelBuilder.Configurations.Add(new AccountEntityConfiguration()) 
      .Add(new UserEntityConfiguration()); 
    } 
} 

и

public class LoadContext : AgileDbContextBase 
{ 
    #region Public Properties 
    public DbSet<ProjectLoadEstimate> ProjectLoadEstimates { get; set; } 
    public DbSet<OccupationType> OccupationTypes { get; set; } 
    public DbSet<LoadReport> LoadReports { get; set; } 
    #endregion 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
     modelBuilder.Configurations.Add(new ProjectLoadEstimateConfiguration()) 
      .Add(new OccupationTypeEntityConfiguration()) 
      .Add(new LoadReportEntityConfiguration()); 
    } 
} 

один из объектов использует еще один, который находится в AgileDbContextBase, а именно:

public class LoadReport : BaseEntity 
{ 
    /// <summary> 
    ///  The date of load report has been created 
    /// </summary> 
    public virtual DateTime Created { get; set; } 

    /// <summary> 
    ///  The project manager 
    /// </summary> 
    public User ProjectManager { get; set; } 

    /// <summary> 
    ///  The Id of project manager 
    /// </summary> 
    public int ProjectManagerId { get; set; } 
} 

оба контексты используют автоматические миграции. Проблема заключается в том, что, когда я пытаюсь обновить базу данных по-LoadContext PackageManager говорит, что

Существует уже объект с именем «Счета» в базе данных.

Похоже, что он пытается воссоздать таблицу, которая уже существует. Как этого избежать? Как узнать код, который из LoadContext ДОЛЖЕН создавать ТОЛЬКО таблицы в базе данных, которые определены как DbSet <> в LoadContext? (возможно, обходное решение)? P.S. Оба контекста используют ту же строку соединения.

Благодарим вас за внимание!

ответ

1

Переопределите метод OnModelCreating и настройте построитель моделей, чтобы игнорировать объекты, которые вы хотите.

Проверьте это сообщение блога для получения более подробной информации http://msdn.microsoft.com/en-us/data/jj591617.aspx

Смежные вопросы