Ответы пользователя по тегу Entity Framework
  • Где нарушение внешнего ключа?

    @Prorom-exe Автор вопроса
    .NET developer
    Проблема была в том, что DbContext отслеживает этот объект. И есть два варианта решения AsNoTraking() либо ручками прописать создание нового объекта
    Ответ написан
    Комментировать
  • Не приходит значение View?

    @Prorom-exe Автор вопроса
    .NET developer
    Решение было следующее, EF нужно было прописать провайдер для того, чтобы он мог мапать числа с плавающей точкой адекватно.
    //в стартапе
    services.AddControllersWithViews(
                    options => options.ModelBinderProviders.Insert(0, new InvariantDecimalModelBinderProvider()));
    
    public class InvariantDecimalModelBinderProvider : IModelBinderProvider
        {
            private readonly ILoggerFactory loggerFactory;
    
            public IModelBinder GetBinder(ModelBinderProviderContext context)
            {
                if (context == null) throw new ArgumentNullException(nameof(context));
    
                if (!context.Metadata.IsComplexType && (context.Metadata.ModelType == typeof(decimal) || context.Metadata.ModelType == typeof(decimal?)))
                {
                    ILoggerFactory loggerFactory = context.Services.GetRequiredService<ILoggerFactory>();
                    return new InvariantDecimalModelBinder(context.Metadata.ModelType, loggerFactory);
                }
    
                return null;
            }
        }
    
        public class InvariantDecimalModelBinder : IModelBinder
        {
            private readonly SimpleTypeModelBinder _baseBinder;
    
            public InvariantDecimalModelBinder(Type modelType, ILoggerFactory loggerFactory)
            {
                _baseBinder = new SimpleTypeModelBinder(modelType, loggerFactory);
            }
    
            public Task BindModelAsync(ModelBindingContext bindingContext)
            {
                if (bindingContext == null) throw new ArgumentNullException(nameof(bindingContext));
    
                var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
    
                if (valueProviderResult != ValueProviderResult.None)
                {
                    bindingContext.ModelState.SetModelValue(bindingContext.ModelName, valueProviderResult);
    
                    var valueAsString = valueProviderResult.FirstValue;
                    decimal result;
    
                   
                    if (decimal.TryParse(valueAsString, NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out result))
                    {
                        bindingContext.Result = ModelBindingResult.Success(result);
                        return Task.CompletedTask;
                    }
                }
    
               it
                return _baseBinder.BindModelAsync(bindingContext);
            }
        }
    Ответ написан
    Комментировать
  • Как правильно настроить связи в Entity Framework Core?

    @Prorom-exe
    .NET developer
    Как то все не очень красиво сделано. Атрибуты [Column("name")] излишни. Понимаю что один алгоритм имеет несколько параметров, соответственно я бы у AlgorithmID добавил атрибут ForignKey и у списка List модификатор virtual
    Ответ написан
    Комментировать