Как установить значение «Изображение» по умолчанию для свойств класса базы данных с помощью Fluent API в ядре asp.net? - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь установить значение «Изображение» по умолчанию для первых свойств кода в моем DBContext, и мне нужно использовать внедрение зависимостей, чтобы добавить «IHostingEnvironment» для получения корневого пути.Как я могу добавить 'IHostingEnvironment' к своему 'OnModelCreating ()', чтобы получить доступ к пути, чтобы найти мои изображения в каталогах и установить их в качестве значения по умолчанию для определенного свойства моего класса базы данных?

Я использую Asp.net core 2.2, и не могу найти мой ответ

protected override void OnModelCreating(ModelBuilder builder,IFormFile img)
{
   base.OnModelCreating(builder);
   builder.Entity<ApplicationUser>(entity =>
   { 
      ...
      byte[] b = new byte[img.Length];
      img.OpenReadStream().Read(b, 0, b.Length);
      p.img = b;
      entity.Property(b => b.UserImage).HasDefaultValue(b);
      ...
   });
}

Я хочу, чтобы в любое время, когда новый пользователь регистрируется на моем сайте, система автоматически устанавливает для него изображение по умолчанию (и случайное) и сохраняет его вБаза данных без повторения кодов чтения и записи изображений в массивах.что-то вроде кода, который я написал выше.

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

По вашему требованию HasDefaultValue не будет работать.Для HasDefaultValue будет сгенерировано значение по умолчанию при добавлении миграции, например:

protected override void Up(MigrationBuilder migrationBuilder)
{
    migrationBuilder.AddColumn<string>(
        name: "UserImage",
        table: "Products",
        nullable: true,
        defaultValue: "Test2");
}

Если вы предпочитаете устанавливать значение по умолчанию с помощью IHostingEnvironment, вы можете попробовать переопределить SaveChanges, например

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    private readonly IConfiguration _configuration;
    private readonly IHostingEnvironment _hostingEnvironment;
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options,
        IConfiguration configuration
        , IHostingEnvironment hostingEnvironment)
        : base(options)
    {
        _hostingEnvironment = hostingEnvironment;
        _configuration = configuration;
    }
    public DbSet<Product> Products { get; set; }

    public override int SaveChanges()
    {            
        foreach (var entityEntry in ChangeTracker.Entries())
        {
            if (entityEntry.Entity is Product product && product.UserImage == null)
            {
                product.UserImage = _hostingEnvironment.ContentRootPath + new Random().Next(10).ToString();
            }
        }
        return base.SaveChanges();
    }
}
0 голосов
/ 17 мая 2019

Если ваша цель - определить значение по умолчанию для некоторого столбца в вашей базе данных, наилучший подход был бы установлен в конструкторе класса, поэтому, когда ваше приложение создает объект этого класса, у этого уже есть значение по умолчанию.

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