2017-07-01 16 views
0

データベースに保存されているプロファイル画像を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プロパティは元の値に戻って設定されます。

+0

エンティティ 'Client'のコードと、コンテキストにカスタムコードがある場合は、それを表示してください。 – DavidG

+0

@DavidG Clientエンティティクラスのコードを追加しました。私のデータベースコンテキストにはカスタムコードがありません。 – saboehnke

+1

@DavidGうわー私は、[DatabaseGenerated(DatabaseGeneratedOption.Computed)]という行がプロファイルイメージの上にあることに気がつきましたが、それはもちろん問題です。私はそれがそこにあったことを知らなかった。 – saboehnke

答えて

0

問題はあなたのエンティティのProfileImageプロパティは、属性が適用されたことである。

Entity Frameworkのを言っている、 from the documentation
[DatabaseGenerated(DatabaseGeneratedOption.Computed)] 

コンピュー:データベースが生成行が挿入または更新されたときの値。

この属性を完全に削除するだけで済みます。

0

以下のコードを試すことができますか? :

Client client = db.Clients.FirstOrDefault(c => c.Email == User.Identity.Name); 
if (client != null) 
{ 
    client.ProfileImage = bytes;  
    var entry = db.Entry(client); 
    entry.Property(e => e.ProfileImage).IsModified = true; 
    db.SaveChanges(); 
} 

client場合は、すでに、コンテキストそれを添付する必要はありませんからロードされています!

+0

私はちょうどそのショットを与え、まだデータベースを更新しません。 – saboehnke

+0

他のアイデア?私はオンラインで何かを見つけるつもりはありません。それが機能していないということは私には意味がありません。 – saboehnke

関連する問題