Как создать базу данных, совместимую с SQL Server, с помощью Entity Framework (сначала код) - PullRequest
1 голос
/ 12 июня 2019

Я следовал этому уроку https://www.freecodecamp.org/news/an-awesome-guide-on-how-to-build-restful-apis-with-asp-net-core-87b818123e28/, и я все понял правильно и работает, но в этом примере API используется опция InMemoryDatabase.Я хочу использовать базу данных SQL Server вместе с ней (я использую код в первую очередь).

Я попытался создать базу данных без таблиц в SQL Server Management Studio и использовать строку подключения со следующим кодом в моем классе Startup, и он работает и сохраняет данные в базе данных, но это делаетне отображается в SQL Server Management Studio.

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    services.AddDbContext<GameCollectionDbContext>(options =>
             {
                  options.UseSqlServer(Configuration.GetConnectionString("DBGAMESCOLLECTION"));
                  // options.UseInMemoryDatabase("GAME_COLLECTION_DB");
             });

    services.AddScoped<IUsersRepository, UsersRepository>();
    services.AddScoped<ICollectionsRepository, CollectionsRepository>();
    services.AddScoped<IGamesRepository, GamesRepository>();

    services.AddScoped<IUsersService, UsersService>();
    services.AddScoped<ICollectionsService, CollectionsService>();
    services.AddScoped<IGamesService, GamesService>();

    services.AddScoped<IUnitOfWork, UnitOfWork>();
    services.AddAutoMapper();
}

Мой appsettings.json выглядит следующим образом

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "ConnectionStrings": {
     "DBGAMESCOLLECTION": "Server=(localdb)\\mssqllocaldb;Database=GAMES_COLLECTION_DB;Trusted_Connection=True;MultipleActiveResultSets=true"
   },
   "AllowedHosts": "*"
 }

Все, что я хочу, - это заставить Entity Framework создавать базу данных на моем локальном компьютере на основемодели, которые я объявил, и полученная база данных будут доступны в SQL Server для выполнения запросов и хранимых процедур.

(ОБНОВЛЕНИЕ)

Полагаю, я должен быть более понятным.Я создал свой REST API с подходом, основанным на коде, потому что я ожидал создать модели и на основе этого получить файл базы данных или скрипт.Впервые я реализовал EF сам, поэтому сначала я использовал опцию InMemoryDatabase для своего контекста, но я знал, что это только для целей тестирования.После того, как API заработал, как и ожидалось, я перешел к использованию реальной базы данных для обеспечения устойчивости.Поэтому я добавил это в свой файл Startup.cs

 public void ConfigureServices(IServiceCollection services)
 {
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        services.AddDbContext<GameCollectionDbContext>(options =>
        {
            options.UseSqlServer(Configuration.GetConnectionString("DBGAMESCOLLECTION"));
            //options.UseInMemoryDatabase("GAME_COLLECTION_DB");

        });
}

И мой appsettings.json закончился следующим образом.

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "ConnectionStrings": {
    "DBGAMESCOLLECTION": "Server=(localdb)\\mssqllocaldb;Database=GAMES_COLLECTION_DB;Trusted_Connection=True;"
  },
  "AllowedHosts": "*"
}

До этого момента база данных работала и данные сохранялись после остановкиконтекст, но мне было интересно, где была создана моя база данных, потому что в SSMS она не отображалась на моей машине.Наконец, я обнаружил, что из-за строки соединений я использовал другой экземпляр sqlexpress, и когда я подключился к механизму '(LocalDb) \ MSSQLLocalDB' в имени сервера SSMS, он был там.

Итак, теперь у меня есть база данных sql server и строка подключения к ней, чтобы я мог работать в то же время.Мой вопрос: как эта конфигурация будет работать в реальной жизни?строка подключения, которую я написал в appsettings.json - это место, где будет создаваться база данных?так если я поставлю ip сервера он там будет?

1 Ответ

0 голосов
/ 13 июня 2019

Попробуйте следующее ...
В вашем appsettings.json ('Строка', а не 'Строка'):

"ConnectionString": {
    "DBGAMESCOLLECTION": "..."
  }

В Startup.cs:

services.AddDbContext<ApplicationContext>(opts => opts.UseSqlServer(Configuration["ConnectionString:DBGAMESCOLLECTION"]));

И вы должны добавить Code-First Migrations .Миграции автоматизируют создание базы данных на основе ваших моделей.Что-то вроде:

PM> Add-Migration *Some_Description*

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