ASP.NET CoreアプリでEntity Framework Core(Code-First)を使用してSQL Serverデータベースにファイルを保存する方法
Filestream
を使用してみましたが、残念ながら次のエラーが発生します。
エンティティタイプ 'UserProfile'のプロパティ 'Avatar'のプロパティは、ナビゲーションプロパティとして構成されているため呼び出すことができません。プロパティはスカラープロパティの構成にのみ使用できます
これがコードです:
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; }
}
そしてマッピング:
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);
}
}
私は何をしますか?ありがとう!
ファイルのバイトをバイト配列に変換できます。
public byte[] Avatar { get; set; }
EF6の類似のアプローチで受け入れられた回答を調べます: Entity Framework 6を使用してSQL Serverからイメージ(バイナリ)を保存および取得します
私はあなたがSQLサーバーのWindowsファイルストリームを使用しようとしていると仮定しています、それは まだ.NET Coreではサポートされていません です。すでに述べたように(SQLサーバーでvarbinary(max)に変換されます)バイト配列としてファイルを保存し、たとえばメモリストリームを使用してアップロードするときにファイルコンテンツをコピーする必要があります。
Efコアでは、これまでデータベースにファイルを保存できないため、次のことができます。
public byte[] Avatar { get; set; }
var avatar = File.ReadAllBytes(filePath);
2.マシンをファイルサーバーとして使用し、ファイルのパスをデータベースに保存します:
public string Avatar { get; set; }
私の意見では2番目の方法の方が優れており、常にこのパターンを使用しますが、それはマシンのH.D.Dと格納するファイルの量によって異なります。