Roles ナビゲーション プロパティを保持する User オブジェクトがあります。
public partial class User
{
public int UserId { get; set; }
public string UserName { get; set; }
public string UserEmail { get; set; }
public string GivenName { get; set; }
public byte[] RowVersion { get; set; }
public Nullable<int> ServiceAreaId { get; set; }
public virtual ICollection<Role> Roles { get; set; }
}
http://www.shawnmclean.com/blog/2011/04/entity-framework-deleteupdate-without-round-trip-to-the-database/で説明されているように、データベースからエンティティを読み取らずに単純なプロパティを更新できます。
public User UpdateUser(User user, IEnumerable<Expression<Func<User, object>>> properties)
{
context.Configuration.ValidateOnSaveEnabled = false;
context.Users.Attach(user);
foreach (var selector in properties)
{
string propertyName = Utils.GetMemberInfoFromExpression(selector.Body);
context.Entry(user).Property(propertyName).IsModified = true;
}
context.SaveChanges();
return user;
}
ただし、ロールのナビゲーション プロパティに対してこれを行う方法や方法がわかりません。試してみると、「エンティティ タイプ Collection`1 は、現在のコンテキストのモデルの一部ではありません。」例外。ありがとう。