質問: 私は、変更することはできません`blob`データ型として、ユーザーのコメント(および他のテキストフィールドのかなりの)を格納するレガシーデータベースを持っています。 私は、データベースから取得されたときに常にデータを`string`に変換し、保存するときにそれを`blob`に戻す必要があるデータアクセス層を作成してい`string` 。 EFスカフォールディングツールは、これらのエンティティの`byte[]`データ型としてプロパティを生成しました。 ``` public byte[] Comment { get; set; } ``` 実際にエンティティのプロパティの型を`string`に変更すると、実際にはデータが正しく保存されますが、データを読み込むとキャストエラーが発生することに気付きました。 > 型 'System.Byte []'のオブジェクトを型 'System.String'にキャストできません。 > > *(興味深いことに、バージョン1.0.0ではこのエラーは発生しませんでした。ロードと保存は正常でした)。* **私の質問は...**データベースから取得したときにこのデータを文字列に自動的に変換し、保存されたときに`blob`に戻すようにEFコアを設定する方法はありますか?あるいは、私はこの操作を行うためにプライベートゲッターとセッターをたくさん書く必要がありますか?
回答: あなたの返答に対する私のコメントに加えて、getterとsetterを追加したくないし、クリーンなコードを望むなら、あなたはextension-methodsで作業することもできます: ``` public static class Extensions { public static byte[] GetBytes(this string @this, System.Text.Encoding encoding = null) { return (encoding??Encoding.UTF8).GetBytes(@this); } public static string GetString(this byte[] @this, System.Text.Encoding encoding = null) { return (encoding??Encoding.UTF8).GetString(@this); } } ``` 次のように両方で作業できます。 ``` myentity.Comment = "my comment".GetBytes(); string comment = myentity.Comment.GetString(); ``` コード内のデフォルト値、つまりUTF8を処理します。使用するエンコーディングに変更するか、次のような別のエンコーディングを入力します ``` byte[] myBytes = "my comment".GetBytes(Encoding.ASCII); ``` あなたの勝利: `byte[]`を使って各プロパティにgetter / setterを指定する必要はありません