Ответы пользователя по тегу .NET
  • Почему In Memory Database не автогенерирует int свойство?

    @netcore Автор вопроса
    Решил по-другому в OnModelBuilding

    if (DataBase.IsInMemory())
    var autoGenIntProperties = modelBuilder.Model.GetEntityTypes()
                    .SelectMany(t => t.GetProperties())
                    .Where(p => p.ClrType == typeof(int) && p.ValueGenerated != ValueGenerated.Never);
    
                foreach (var property in autoGenIntProperties)
                    property.SetValueGeneratorFactory((p, t) => new InMemoryIntegerValueGenerator<int>(p.GetIndex()));


    Это скорее всего потому что:
    1. Ключи понятно как инкрементить, а кастомные поля нет
    2. У каждой бд реализация этого кейса разная, по этому нужно явно указывать в InMemory как отыгрывать этот кейс

    Странно что в апишке не предусмотрели этот кейс обязательного использования инкрементации при инициализации, что бы юзеры не ломали голову часами
    Ответ написан
    Комментировать
  • Как в ASP.NET Core инжектировать конкретную реализацию?

    @netcore
    Тенанты назваются такие вещи. В основном используется арендаторами, когда у тебя один код, и в зависимости от запроса\ползьователя\заголовков подкладываешь разные БД. Можно и тут заюзать.

    public interface ITenantServiceProvider
        {
            IService Service { get; }
        }
    
        public class TenantServiceProvider : ITenantServiceProvider
        {
            public IService Service { get; private set; }
    
            public TenantServiceProvider(HttpContextAccessor contextAccessor)
            {
                var controllerName = contextAccessor.HttpContext.GetRouteData().Values["controller"].ToString().ToLower();
                if (controllerName.Contains("admin"))
                    Service = contextAccessor.HttpContext.RequestServices.GetService(typeof(HDDService));
            }
        }


    Использовать так:
    services.AddScoped<HDDService>();
    services.AddScoped<ITenantServiceProvider,TenantServiceProvider>();
    Ответ написан
    Комментировать