C# - 无法从数据库

时间:2018-05-06 19:58:00

标签: c# entity-framework enums

我无法使用Entity Framework从数据库中检索实体。我有一个名为 Order 的实体。为了检索记录,我做了:

public IQueryable<Order> GetOrder(int id) {
    return Context.Orders.Where(e => e.Id == id);
}

当我使用ViewModel模式时,我需要将 Order 实体转换为 OrderDTO ,所以我像这样进行转换:

return orderManager.GetOrder(id).ToList().AsQueryable().ProjectTo<OrderDTO>().ToList();

问题是,当我进行此转换时,我收到一条错误消息:

  

''订单'上的' PaymentMethod '属性无法设置为   'System.String'值。您必须将此属性设置为非null值   类型' PaymentMethod '。

调试,我发现当我执行 ToList()时会发生这种情况。例如:

public IQueryable<Order> GetOrder(int id) {
    var test = Context.Orders.Where(e => e.Id == id).ToList(); // fatal error

    return Context.Orders.Where(e => e.Id == id);
}

关于此错误的Google搜索,this是我找到的唯一相关信息,但我不确定是否必须执行该博客中解释的更改。我也尝试了这个,但它没有用:

return Context.Orders.Include(e => e.)... //Nothing appears in Intellisense
//or
return Context.Orders.Include("PaymentMethod")...

我的代码

PaymentMethod 是这样的枚举:

public enum PaymentMethod
{
    PayPal,
    CreditCard,
    Transfer
}

订单实体基本上就是这样(它更大但是没关系):

public class Order
{
    public int Id { get; set; }
    public List<OrderLine> OrderLines { get; set; }
    public DateTime? PaymentDate { get; set; }
    public PaymentMethod PaymentMethod { get; set; }
}

1 个答案:

答案 0 :(得分:2)

return orderManager.GetOrder(id).ToList().AsQueryable().ProjectTo<OrderDTO>().ToList();

这里,调用ToList功能可以防止投影。 那是对的:

return orderManager.GetOrder(id).ProjectTo<OrderDTO>().ToList();

枚举在EF中被视为数字(int),而不是字符串。