c# - C# - 无法从数据库中检索实体
问题描述
我无法使用实体框架从数据库中检索实体。我有一个名为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();
问题是,当我进行此转换时,我收到一条错误消息:
“ Order ”上的“ PaymentMethod ”属性无法设置为“System.String”值。您必须将此属性设置为“ 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);
}
谷歌搜索此错误,这是我找到的唯一相关信息,但我不确定是否必须进行该博客中解释的更改。我也试过这个,但没有奏效:
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; }
}
解决方案
return orderManager.GetOrder(id).ToList().AsQueryable().ProjectTo<OrderDTO>().ToList();
在这里,调用 ToList 函数会阻止投影。这是正确的:
return orderManager.GetOrder(id).ProjectTo<OrderDTO>().ToList();
并且枚举在 EF 中被视为数字 (int),而不是字符串。
推荐阅读
- python - 为什么 python 在我导入模块时给我一个错误?
- python - 从 pbf 或 osm 格式提取和绘制所有高速公路
- tensorflow - keras/tensorflow中语义图像分割的多类加权损失
- c - Dev-C++ 536870912 浮点变量输出
- javascript - '#${parentId}' 的组合在 JavaScript 中是什么意思?
- html - 为辅助技术连接 HTML 中的单独列表
- azure - 以编程方式注册 Azure 应用程序(图形 API)
- c# - Unity 不会通过 eulerangles 移动对象
- c# - 调用 EndAccept 并访问 RemoteEndPoint 后 Socket 未连接异常
- javascript - HTML onchange 事件有时会在输入复选框元素上触发两次