[英]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.