データベースまたはファイルへの画像の保存については、この質問を参照してください。
DB に格納することにした場合、最も重要なことは、User をクエリするたびに取得しないことです。これは、潜在的に大量のデータとパフォーマンスの問題になる可能性があります。byte[]
これを行うには、画像を別のテーブルに保存するかbyte[]
、同じテーブルを持つ別のエンティティにマップします (ユーザーが画像を 1 つしか持てないと仮定します)。
[ActiveRecord("users")]
public class UserWithoutPicture {
[PrimaryKey]
public virtual int Id {get;set;}
...
[BelongsTo]
public virtual UserProfilePicture ProfilePicture {get;set;}
}
[ActiveRecord("users")]
public class UserProfilePicture {
[PrimaryKey]
public virtual int Id {get;set;}
[Property]
public virtual byte[] Image {get;set;}
}
ただし、これにはいくつかのファンキーな動作があります。たとえば、特定のユーザーのProfilePicture
が null になることはありません。実際にはユーザーであるため、実際に挿入または削除することはUserProfilePicture
なく、代わりに常に更新します。また、追加の結合が発生するため、 SELECT N+1に注意する必要があります。それは私の頭のてっぺんから外れており、完全にテストされていません。
結論: 画像を別のテーブルに保存する方がはるかに柔軟です。
Image
raw の代わりにan を処理する利便性が必要な場合はbyte[]
、 を実装しIUserType
ます。ただし、Image は IDisposable であることを忘れないでください。適切なタイミングで破棄するのは非常に困難です。
画像を返すモノレール コントローラーの実装は非常に簡単です... を使用[ARFetch]
して id を取得UserProfilePicture
し、適切なコンテンツ タイプで応答ストリームに書き込むだけです。