2

私は新しいプロジェクトを開始したばかりで、以前はEntity Frameworkで幸せな時間を過ごしたことがあり、最新バージョンでNugetを使用しました。エンティティを更新しようとするまで、すべてが順調でした。私は次のコードを持っています。

using (var c = new EFContext())
{
      Data.User u = new Data.User() { UserId = UserId };
      c.Users.Attach(u);
      u.FailedPasswordAttemptCount = newFailedPasswordAttemptCount;
      c.SaveChanges();
}

これはEF4で正常に機能しました。ただし、EF5では、ユーザーテーブル(UserName)にnull不可のフィールドがあるため、これはDbEntityValidationExceptionでクラップスします。

これを解決するには、空のUserNameを使用してData.Userオブジェクトを作成し、変更されたプロパティをEFに通知します。

using (var c = new EFContext())
{
      Data.User u = new Data.User() { UserId = UserId, UserName = "" };
      ...
      c.Entry(u).Property("FailedPasswordAttemptCount ").IsModified = true;
      ...
}

ただし、このテーブルや他の多数のテーブルにnull許容でないフィールドが追加されるため、これは特に管理しやすいようには見えません。

この質問は、Attachから派生したエンティティに対してのみ機能することを示していEntityObjectます。したがって、EF5オブジェクトはこれから派生していないと思います。

null許容でないすべての文字列フィールドを毎回指定しなくても、エンティティを更新する方法を誰もが知っています。

本当に明らかな何かが欠けているような気がします。

4

1 に答える 1

1

これが既存のユーザーである場合は、これを行うことができます...

c.Users.First(user=>user.UserId == UserId).FailedPasswordAttemptCount =         newFailedPasswordAttemptCount;

c.SaveChanges(); 

ちなみに、余談ですが、最初のEF5コードでは、エンティティクラスは何からも派生しませんが、アタッチすることはできます。

または、アタッチの方法に戻りますが、EFはエンティティ全体のみを検証するか、何も検証しないように見えるため、この保存の検証をオフにする必要があると思います。

using (var c = new EFContext()) 
{       
    c.Configuration.ValidateOnSaveEnabled = false; 
    Data.User u = new Data.User() { UserId = UserId };       
    c.Users.Attach(u);       
    u.FailedPasswordAttemptCount = newFailedPasswordAttemptCount;       
    c.SaveChanges(); 
} 
于 2012-10-15T11:21:44.077 に答える