ユーザーが管理者でない限り、ユーザーが所有する注文のみを編集できるようにする UpdateOrders というメソッドがあります。管理者の場合、すべての注文を編集できます。
.NET 4.5 で Entity Framework 5 を使用しています。
次のコードは、行で「タイプ 'User' の定数値を作成できません」というエラーを生成しますvar target = _context.Orders.FirstOrDefault...
。
public Order UpdateOrders(Order order)
{
var userName = HttpContext.Current.User.Identity.Name.ToLower();
var target = _context.Orders.FirstOrDefault(o => o.OrderID == order.OrderID
&& (o.User.UserName.ToLower() == userName || _context.Users.FirstOrDefault(u => u.UserName == userName).Role.RoleName == "Administrator"));
if (target != null)
{
_context.Entry(target).CurrentValues.SetValues(order);
_context.SaveChanges();
}
return target;
}
RoleName を変数に設定する別の行を削除_context.Users.FirstOrDefault(u => u.UserName == userName).Role.RoleName
して、その変数をコードに入れると問題なく動作しますが、データベースにもう一度ヒットすることになります。
私が使用する場合_context.Orders.Where
、エラーは発生せず、単一のクエリですべてのロジックを実行します。したがって、このコードは実際には問題なく動作します。
public void TestMethod(Order order)
{
var userName = HttpContext.Current.User.Identity.Name.ToLower();
var target = _context.Orders.Where(o => o.OrderID == order.OrderID
&& (o.User.UserName.ToLower() == userName || _context.Users.FirstOrDefault(u => u.UserName == userName).Role.RoleName == "Administrator")).ToList();
return;
}
FirstOrDefault
問題がWhere
ないのはなぜですか?目的の結果を取得し、すべてのロジックを単一のクエリに保持する方法はありますか?
ありがとう!