实体框架:无法创建类型为**的常量值.在此上下文中只支持基本类型或枚举类型

本文关键字:类型 上下文 支持 枚举 常量 框架 创建 实体 | 更新日期: 2023-09-27 18:16:23

我有这样的查询:

     public override IEnumerable<Order> ExecuteQuery(MovieRentalContext database)
    {
        return from order in database.Orders
            where (customer == null || customer.Id == order.CustomerId)
            select order;
    }

其中customer是类中的字段。有Order类

   public class Order: Entity
{
    [Required]
    public Copy Copy { get; set; }
    public Customer Customer { get; set; }
    public DateTime OrderDate { get; set; }
    public DateTime EstimatedReturnDate { get; set; }
    public Salesman Salesman { get; set; }
    public DateTime? ActualReturnDate { get; set; }
    public decimal Price { get; set; }
    [ForeignKey("Customer")]
    public long CustomerId { get; set; }
}

实体包含Id。我想获取客户的订单,但是在执行查询时抛出了一个异常:

无法创建类型为>'MovieRental.DataAccess.Models.Customer'的常量值。在此上下文中只支持基本类型或枚举>类型。

我试了所有我找到的,但它仍然不工作。有什么问题吗?

实体框架:无法创建类型为**的常量值.在此上下文中只支持基本类型或枚举类型

我想说你的customer == null代码导致了这一点。EF正试图将其转换为SQL,但客户不在该上下文中。请尝试将该条件置于查询之外。

ie

public override IEnumerable<Order> ExecuteQuery(MovieRentalContext database)
{
    if (customer != null)
    {
        return from order in database.Orders
            where order.CustomerId == customer.Id
            select order;
    }
    else
    {
        return from order in database.Orders
            select order;
    }
}