Таблицы не созданы после команд миграции - PullRequest
0 голосов
/ 15 марта 2020

Сначала я использую код структуры объекта 6.4.0 в своем проекте.

Вот класс контекста:

class LibraryContext : DbContext
{
    public LibraryContext() : base("LibraryContext")
    {}
    public DbSet<Person> persons { get; set; }
    public DbSet<Book> books { get; set; }
    public DbSet<Review> reviews { get; set; }
}

Вот строка подключения из файла приложения:

<add name="LibraryContext" connectionString="Data Source=DESKTOP-ND0H3GG\LOCALHOST;Initial Catalog=LibraryDB;User ID=sa;Password=blabla;"/>

Вручную на сервере с именем «DESKTOP-ND0H3GG \ LOCALHOST» я создал базу данных, которая называется LibraryDB.

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

Но я не вижу этих трех таблиц в базе данных. Вместо этого я вижу созданную базу данных с именем LibraryContext и три упомянутые выше таблицы на сервере (localdb) \ MSSQLLocalDB.

Вот как это выглядит:

enter image description here

Есть идеи, почему таблицы не созданы в LibraryDB?

1 Ответ

0 голосов
/ 16 марта 2020

Вы должны указать connStr при создании DbContext, то есть в NET Я создаю ядро ​​с помощью собственного расширения DbContext:

public static class ServiceCollectionExtensions
{
    public static IServiceCollection ConfigureSqlServerDbContext<TContext>(this IServiceCollection serviceCollection,  string connectionString) 
        where TContext: DbContext
    {
        serviceCollection.AddDbContext<TContext>(options => options.UseQueryTrackingBehavior(QueryTrackingBehavior.TrackAll)
                                                                   .UseSqlServer(connectionString)
                                                                   .UseLazyLoadingProxies());
        return serviceCollection;
    }
}

, и я запускаю миграцию при запуске приложения (в моем примере я использую appsettings. json для чтения разделов конфигурации, FeesCalculationModelContext - это мой контекст базы данных):

        IList<IConfigurationSection> connections = _configuration.GetSection(ConnectionStringsSectionKey).GetChildren().ToList();
        string feesCalculationConnectionString = connections.First(item => string.Equals(item.Key.ToLower(), FeesCalculationConnectionStringKey.ToLower())).Value;
        FeesCalculationConnectionString = feesCalculationConnectionString;

        // 2. Configure context's
        services.AddEntityFrameworkSqlServer();
        // 2. b. Fees calc
        services.ConfigureSqlServerDbContext<FeesCalculationModelContext>(feesCalculationConnectionString);
        // migrate fees calculation ...
        IServiceProvider serviceProvider = services.BuildServiceProvider();
        FeesCalculationModelContext feesCalculationDbService = serviceProvider.GetService<FeesCalculationModelContext>();
        feesCalculationDbService.Database.Migrate();

, если вы хотите указать базу данных и обновить ее с помощью команды, у вас должна быть фабрика контекста базы данных времени разработки:

internal class FeesCalcMigrationsDbContextFactory : IDesignTimeDbContextFactory<FeesCalculationModelContext>
{
    public FeesCalculationModelContext CreateDbContext(string[] args)
    {
        //todo: umv: move hardcoded conn string to migrationsSettings.json
        string startupPath = Path.Combine(Environment.CurrentDirectory, @"..\B2b.Data");
        string migrationsConfigFile = Path.Combine(startupPath, "migrations.Development.settings.json");
        IConfigurationBuilder configurationBuilder = new ConfigurationBuilder().AddJsonFile(migrationsConfigFile, false, false);
        IConfigurationRoot configration = configurationBuilder.Build();
        string connectionString = configration.GetConnectionString("FeesCalculationConnectionString");
        DbContextOptionsBuilder<FeesCalculationModelContext> optionsBuilder = new DbContextOptionsBuilder<FeesCalculationModelContext>();
        optionsBuilder.UseSqlServer(connectionString);
        return new FeesCalculationModelContext(optionsBuilder.Options);
    }
}

Для добавления миграции и обновления базы данных вы должны использовать следующие команды (NuGet Console, выберите проект, содержащий ваш DbContext):

Add-Migration {name} -Context FeesCalculationModelContext -OutputDir FeesCalculation \ Migrations

Update-Database -Context FeesCalculationModelContext

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...