Есть приложение API, которое работает с БД и с EF Core, на миграциях.
Приложение перенес в докер контейнер. Все его зависимости и mssql бд - перенесена в контейнр отдельный.
Приложение запускается на порту, swagger показывает все методы, модели и тд.
НО! Когда после перехода на какой-то контроллер с методом GET. Выводится ошибка:
Failed executing DbCommand (56ms) [Parameters=[@__p_0='?' (DbType = Int32), @__p_1='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30']
web | SELECT [t].[Id], [t].[Description], [t].[Label], [t].[Price], [t].[Thumbnail], [t0].[ProductId], [t0].[CategoryId], [t0].[Id], [t0].[Label], [t0].[Thumbnail]
web | FROM (
web | SELECT [p].[Id], [p].[Description], [p].[Label], [p].[Price], [p].[Thumbnail]
web | FROM [Products] AS [p]
web | ORDER BY [p].[Id]
web | OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY
web | ) AS [t]
web | LEFT JOIN (
web | SELECT [p0].[ProductId], [p0].[CategoryId], [c].[Id], [c].[Label], [c].[Thumbnail]
web | FROM [ProductCategories] AS [p0]
web | INNER JOIN [Categories] AS [c] ON [p0].[CategoryId] = [c].[Id]
web | ) AS [t0] ON [t].[Id] = [t0].[ProductId]
web | ORDER BY [t].[Id], [t0].[ProductId], [t0].[CategoryId], [t0].[Id]
web | [13:05:29 ERR] An exception occurred while iterating over the results of a query for context type 'ShoppingCart.Infrastructure.Data.DataContext'.
web | Microsoft.Data.SqlClient.SqlException (0x80131904): Invalid object name 'Products'.
Как я понимаю, что сама БД существует, т.к. коннект произошел. Но, нет данных и нет таблицы. *из солюшн скопировал и сбилдит проект где есть миграции.
Вопрос: Как мне можно тогда "насильно" апдейтнуть бд? Знаю, что есть dotnet cli команды, типу dotnet ef database update и тд. Но не пойму как мне и куда его внести)
DOCKERFILE
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["ShoppingCart.API/ShoppingCart.API.csproj", "ShoppingCart.API/"]
RUN dotnet restore "ShoppingCart.API/ShoppingCart.API.csproj"
COPY . .
WORKDIR "/src/ShoppingCart.API"
RUN dotnet build "ShoppingCart.API.csproj" -c Release -o /app/build
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS migration
WORKDIR /src
COPY ["ShoppingCart.Infrastructure.Data/ShoppingCart.Infrastructure.Data.csproj", "ShoppingCart.Infrastructure.Data/"]
RUN dotnet restore "ShoppingCart.Infrastructure.Data/ShoppingCart.Infrastructure.Data.csproj"
COPY . .
WORKDIR "/src/ShoppingCart.Infrastructure.Data"
RUN dotnet build "ShoppingCart.Infrastructure.Data.csproj" -c Release -o /app/migration
FROM build AS publish
RUN dotnet publish "ShoppingCart.API.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /migration
COPY --from=migration /app/migration .
WORKDIR /app
COPY --from=build /app/build .
ENTRYPOINT ["dotnet", "ShoppingCart.API.dll"]
Docker-compose
version: '3.9'
networks:
localdev:
name: localdev
services:
web:
container_name: web
build: .
depends_on: [ mssql ]
ports:
- "8080:80"
networks:
- localdev
mssql:
image: "mcr.microsoft.com/mssql/server"
container_name: mssql
hostname: mssql
environment:
SA_PASSWORD: "fA0bD7rO3iE1mU0w"
ACCEPT_EULA: "Y"
restart: unless-stopped
networks:
- localdev
ports:
- "1433:1433"
expose:
- 1433