我有一个名为 UpdateOrders 的方法,它应该允许用户只编辑他们拥有的订单,除非用户是管理员,在这种情况下他们可以编辑所有订单。
我在 .NET 4.5 中使用实体框架 5。
以下代码在第 1 行产生错误“无法创建类型为 '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;
}
我可以删除_context.Users.FirstOrDefault(u => u.UserName == userName).Role.RoleName
一个单独的行,将 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
不存在的问题?有没有办法获得我想要的结果并将所有逻辑保留在一个查询中?
谢谢!