Как создать пользовательский ReusableDbContext - PullRequest
0 голосов
/ 26 марта 2012

Три класса:

  • CustomDbContext
  • ReusableContext
  • DbContext

Связь:

  • ReusableContext: DbContext
  • CustomDbContext: ReusableContext

Код:

public class ReusableDbContext : DbContext
{
    public ReusableDbContext() 
        : base("name = myConnectionString")
    {
        Database.SetInitializer<ReusableDbContext>(new 
MigrateDatabaseToLatestVersion<ReusableDbContext, ReusableMigrationsConfiguration>());
    }

    public DbSet<ReusableTable> ReusableTables{ get; set; }
}

public class ReusableMigrationsConfiguration : DbMigrationsConfiguration<ReusableDbContext>
{
    public ReusableMigrationsConfiguration()
        : base()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
    }

    protected override void Seed(ReusableDbContext context)
    {
        //ReusableMigrationsConfiguration Seed Logic here
        // this Seed method is never called  -----------  The Problem here!
    }
}

затем я пытаюсь использовать ReusableContext следующим образом:

public class CustomDbContext : ReusableDbContext
{
    public CustomDbContext() 
        : base()
    {
        Database.SetInitializer<CustomDbContext>(new 
MigrateDatabaseToLatestVersion<CustomDbContext, CustomMigrationsConfiguration>());
    }

    public DbSet<CustomTable> CustomTables{ get; set; }
}

public class CustomMigrationsConfiguration : DbMigrationsConfiguration<CustomDbContext>
{
    public CustomMigrationsConfiguration()
        : base()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
    }

    protected override void Seed(CustomDbContext context)
    {
        //CustomMigrationsConfiguration Seed Logic
        // this Seed method is called, no problem here
    }
}

после запуска проекта:

  • ReusableTable и CustomTable созданы
  • Вызывается метод Seed для CustomMigrationsConfiguration, и ОК
  • НО, метод Seed метода ReusableMigrationsConfiguration НЕ вызывается -------- Что не так?

Ответы [ 2 ]

1 голос
/ 27 марта 2012

Проблема решена, вот решение.

Класс:

  • CustomDbContext, CustomMigrationsConfiguration
  • ReusableContext, ReusableMigrationsConfiguration < TContext >
  • DbContext

Отношение:

  • ReusableContext: DbContext
  • ReusableMigrationsConfiguration < TContext >: DbMigrationsConfiguration < TContext > где TContext: ReusableContext
  • CustomMigrationsConfiguration: ReusableMigrationsConfiguration < CustomDbContext >

Код:

public class ReusableDbContext : DbContext
{
    public ReusableDbContext() 
        : base("name = myConnectionString")
    {
        Database.SetInitializer<ReusableDbContext>(new 
MigrateDatabaseToLatestVersion<ReusableDbContext, ReusableMigrationsConfiguration>());
    }

    public DbSet<ReusableTable> ReusableTables{ get; set; }
}

public class ReusableMigrationsConfiguration<TContext> : DbMigrationsConfiguration<TContext> where TContext : ReusableDbContext
{
    public ReusableMigrationsConfiguration()
        : base()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
    }

    protected override void Seed(TContext context)
    {
        //ReusableMigrationsConfiguration Seed Logic here
        // is called and OK now.
    }
}

Теперь мы можем повторно использовать ReusableContext следующим образом:

public class CustomDbContext : ReusableDbContext
{
    public CustomDbContext() 
        : base()
    {
        Database.SetInitializer<CustomDbContext>(new 
MigrateDatabaseToLatestVersion<CustomDbContext, CustomMigrationsConfiguration>());
    }

    public DbSet<CustomTable> CustomTables{ get; set; }
}

public class CustomMigrationsConfiguration : ReusableMigrationsConfiguration<CustomDbContext>
{
    public CustomMigrationsConfiguration()
        : base()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
    }

    protected override void Seed(CustomDbContext context)
    {
        base.Seed(context);



        //CustomMigrationsConfiguration Seed Logic
        // this Seed method is called and OK
    }
}

после запуска проекта:

  • Создаются ReusableTable и CustomTable;
  • Вызывается метод Seed для CustomMigrationsConfiguration и OK;
  • Вызывается метод Seed для ReusableMigrationsConfiguration и OKтоже.

сейчас все вроде бы нормально:)

0 голосов
/ 26 марта 2012
public class CustomDbContext : **ReusableDbContext**
{
    public CustomDbContext() 
        : base()
    {
        Database.SetInitializer<CustomDbContext>(new 
MigrateDatabaseToLatestVersion<CustomDbContext, CustomMigrationsConfiguration>());
    }

    public DbSet<CustomTable> CustomTables{ get; set; }
}

Сделай это будет работать

public class CustomMigrationsConfiguration : DbMigrationsConfiguration<CustomDbContext>
{
    public ReusableMigrationsConfiguration()
        : base()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
    }

    protected override void Seed(CustomDbContext context)
    {
        //CustomMigrationsConfiguration Seed Logic
        // this Seed method is called, no problem here
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...