データベースに保存されているプロファイル画像をbyte []として更新するための簡単なコードがあります。いくつかの奇妙な理由から、エラーなしで自分のコードを実行しますが、データベースはユーザーが選択した新しい画像では更新されません。ここEFデータベースのコンテキストが更新を保存しない
Client client = db.Clients.FirstOrDefault(c => c.Email == User.Identity.Name);
if (client != null)
{
client.ProfileImage = bytes;
db.Clients.Attach(client);
var entry = db.Entry(client);
entry.Property(e => e.ProfileImage).IsModified = true;
db.SaveChanges();
}
クライアントエンティティ・クラスのためのコードである:
public partial class Client
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Client()
{
Customers = new HashSet<Customer>();
}
public int ID { get; set; }
public int? StripeID { get; set; }
[Required]
[StringLength(200)]
public string Name { get; set; }
[Required]
[StringLength(150)]
public string Email { get; set; }
public Guid UserID { get; set; }
public bool IsActive { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public byte[] ProfileImage { get; set; }
public virtual StripeInfo StripeInfo { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Customer> Customers { get; set; }
}
、コードをデバッグした後、私は、プロフィール画像が正しいバイト[]とclient.ProfileImageに設定されていることを見ることができます正しいバイト[]が含まれていますが、db.SaveChanges()が呼び出されるとすぐに、client.ProfileImageは元々のものに戻されます。何のエラーも発生しないので、私は本当になぜこれが起こっているのか理解できません。
1)アップデートを行うための新しいデータベースコンテキスト・インスタンスを作成します。ここでは2017年7月4日
は、私はいくつかのより多くのインターネット上で探した後、試してみましたが、いくつかの追加のものです。 2)元のデータベースコンテキストを破棄し、新しいデータベースコンテキストを作成して更新します。
上記のいずれの試みもうまくいきませんでした。 db.SaveChanges()が呼び出されると、ProfileImageプロパティは元の値に戻って設定されます。
エンティティ 'Client'のコードと、コンテキストにカスタムコードがある場合は、それを表示してください。 – DavidG
@DavidG Clientエンティティクラスのコードを追加しました。私のデータベースコンテキストにはカスタムコードがありません。 – saboehnke
@DavidGうわー私は、[DatabaseGenerated(DatabaseGeneratedOption.Computed)]という行がプロファイルイメージの上にあることに気がつきましたが、それはもちろん問題です。私はそれがそこにあったことを知らなかった。 – saboehnke