ports:
- "7000:80"
ports:
- "5000:80"
- "5001:443"
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS builder
COPY . .
WORKDIR /src
RUN dotnet restore "SolutionName.sln" && \
dotnet build "SolutionName.sln" -c Release -o /src/build && \
cd /path/to/proj && \
dotnet publish "ProjectToPublish.csproj" -c Release -o /src/publish
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS final
WORKDIR /app
COPY --from=publish /src/publish .
ENTRYPOINT ["dotnet", "ProjectName.dll"]
RUN dotnet restore ./build/ShoppingCart.API.csproj
RUN dotnet publish -c Release -o out
public async Task<bool> IsDublicated(string label)
{
var existedProduct = await _context.Set<Product>()
.FirstOrDefaultAsync(property => property.Label.ToLower() == label.ToLower());
return existedProduct != null;
}
if (await _unitOfWork.ProductRepository.IsDublicated(product.Label))
{
throw new DataDublication("Label already exists.");
}
public interface IMyItem
{
bool IsMatch(string pattern);
}
public static IQueryable<T> ApplyFilter<T>(this IQueryable<T> source, string filtertext) where T: IMyItem
{
return source.Where(item => item.IsMatch(filtertext));
}
public static IOrderedQueryable<TSource> OrderByAscOrDesc<TSource>(this IQueryable<TSource> query, string propName, bool isDesc)
{
var entityType = typeof(TSource);
var propInfo = entityType.GetProperty(propName);
if (propInfo.DeclaringType != entityType)
propInfo = propInfo.DeclaringType.GetProperty(propName);
if (propInfo == null) return (IOrderedQueryable<TSource>)query;
var arg = Expression.Parameter(entityType, "x");
var property = Expression.MakeMemberAccess(arg, propInfo);
var selector = Expression.Lambda(property, new ParameterExpression[] { arg });
var methodName = isDesc ? "OrderByDescending" : "OrderBy";
var method = typeof(Queryable).GetMethods()
.Where(x => x.Name == methodName && x.IsGenericMethodDefinition)
.Where(x => x.GetParameters().Length == 2)
.Single();
var genericMethod = method.MakeGenericMethod(entityType, propInfo.PropertyType);
return (IOrderedQueryable<TSource>)genericMethod.Invoke(genericMethod, new object[] { query, selector });
}
public static QueryableExtensions {
public static IQueryable<T> TakePaged<T>(this IQueryable<T> query, int take, int skip) =>
query.Take(take).Skip(skip);
}
Но я не пойму куда его запихнуть) Если впихнуть его в этот класс, где находится работа с entity, то ошибку получаю, что расширяющие методы должны быть в non-generic-классах...
public static IQueryable<TEntity> ApplyFiltEntity(this IQueryable<TEntity> entity,
Func<TEntity, string> field, string filter)
{
return entity.Where(x => field(x).Contains(filter));
}
</code >
Однако скорее всего у вас будут проблемы с трансляцией переданной функции. Преобразовать ее в SQL 99% не выйдет
Console.WriteLine("new Item { Thumbnail = " + "{1}" + " }");
Console.WriteLine("new Item { Thumbnail = " + $"{item.Thumbnail}" + " }");
должен ли разработчик коммитить все что сделал одним коммитом? или ему нужно к примеру, models папку - закоммитить как "models / entities" и тд прочие папки с файлами?
Нужно ли делать merge разработчику после проверки высшего по рангу товарища? И куда это должно быть в dev?