使用Entity Framework Core将文件存储在数据库中

str*_*bot 6 .net c# sql-server entity-framework-core asp.net-core

如何使用ASP.NET Core应用程序中的Entity Framework Core(代码优先)在SQL Server数据库中存储文件?

我尝试过使用Filestream但不幸的是我收到了这个错误:

无法在实体类型"UserProfile"上为属性"Avatar"调用Property,因为它已配置为导航属性.属性只能用于配置标量属性

这是代码:

public class UserProfile : BaseEntity {
    public FileStream Avatar { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime DateOfBirth { get; set; }
    public Sex Sex { get; set; }
    public string Address { get; set; }
    public string PhoneNumber { get; set; }

    public virtual IEnumerable<Email> Emails { get; set; }
    public virtual User User { get; set; }
    public int UserID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并映射:

public class UserProfileMap {
    public UserProfileMap(EntityTypeBuilder<UserProfile> entityBuilder) {
        entityBuilder.HasKey(e => e.ID);
        entityBuilder.Property(e => e.Avatar);
        entityBuilder.Property(e => e.FirstName);
        entityBuilder.Property(e => e.LastName);
        entityBuilder.Property(e => e.DateOfBirth);
        entityBuilder.Property(e => e.Sex);
        entityBuilder.Property(e => e.Address);
        entityBuilder.Property(e => e.PhoneNumber);
        entityBuilder.HasMany(e => e.Emails).WithOne(u => u.UserProfile).HasForeignKey(x => x.UserProfileID);
    }
}
Run Code Online (Sandbox Code Playgroud)

我该怎么办?谢谢!

小智 10

您可以将文件字节转换为字节数组.

public byte[] Avatar { get; set; }
Run Code Online (Sandbox Code Playgroud)

检查EF6的类似方法中接受的答案: 使用Entity Framework 6从SQL Server保存和检索图像(二进制)