私のモデルには、たくさんのドメインオブジェクトがあります。ユーザーオブジェクトを更新しようとすると問題が発生します。Userは、Roleオブジェクトに対して外部キー関係を持っています。外部キー値(FkRoleId)を変更せずにUser-objectを更新すると、すべて正常に機能します。しかし、更新したい現在のユーザーの役割を変更すると、次のエラーが発生します。
参照整合性制約違反が発生しました:参照制約を定義するプロパティ値が、関係のプリンシパルオブジェクトと依存オブジェクトの間で一貫していません。
ユーザーオブジェクトを更新する方法は次のとおりです。
public void Update(User user)
{
using (var context = new DBEntities())
{
context.Entry(user).State = System.Data.EntityState.Modified;
context.SaveChanges();
}
}
この例外を取得せずにユーザーオブジェクトを更新するにはどうすればよいですか?ユーザーを別の役割にマップするための外部キー値を変更する方法が必要です。
この場合の私のドメインクラスは次のとおりです。
public partial class User
{
public User()
{
this.Advertisers = new HashSet<Advertiser>();
this.Cases = new HashSet<Case>();
this.Materials = new HashSet<Material>();
}
public int PkId { get; set; }
public int FkRoleId { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public System.DateTime Created { get; set; }
public bool Active { get; set; }
public virtual ICollection<Advertiser> Advertisers { get; set; }
public virtual ICollection<Case> Cases { get; set; }
public virtual ICollection<Material> Materials { get; set; }
public virtual Role Role { get; set; }
}
public partial class Role
{
public Role()
{
this.Users = new HashSet<User>();
}
public int PkId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual ICollection<User> Users { get; set; }
}