簡體   English   中英

如何在asp.net核心中使用Fluent API在數據庫類屬性上設置默認的“圖像”?

[英]How to set default 'Image' on database class properties with Fluent API in asp.net core?

我正在嘗試在我的DBContext中的代碼優先屬性上設置默認的“圖像”,並且需要使用依賴注入來添加“IHostingEnvironment”以獲得根路徑。 如何在我的'OnModelCreating()'中添加'IHostingEnvironment'來訪問在目錄中查找我的圖像的路徑,並將它們設置為我的數據庫類的特定屬性的默認值?

我正在使用Asp.net核心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);
      ...
   });
}

我希望任何時候新用戶注冊到我的網站,自動系統為他設置默認(和隨機)圖像並將其存儲在數據庫中,而不重復讀取和寫入數組中的圖像的代碼。 類似我上面寫的代碼。

如果您的目標是為數據庫中的某個列定義默認值,那么最好的方法將在類構造函數中設置,這樣當您的應用程序創建該類的實體時,該方法已經具有默認值。

根據您的要求, 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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM