使用对象的ViewModel QueryException

时间:2011-03-31 14:59:01

标签: asp.net-mvc

Hy Guys。

我有两个实体:“交互”和“订单”,它们有很多“交互”。

在视图上,我想要一个不同的类(如<tr class=@cssClass>)用于未读取交互的订单。所以我创建了一个ViewModel。

我的ViewModel:

public class OrderViewModel
{
    public Order Order{get;set;}
    public bool isRead{get;set;}
}

我的控制器(我正在使用存储库):

var orders = orderRepo.All();
var viewModel = orders.Select(order=> new orderViewModel
{
    Order = order, '<------------'
    isRead = order.Interactions.Any(x => x.Read == true),
});
return View(viewModel);

如果我拿出Order = order,它工作正常。但是使用这段代码我收到了这个错误:

  

QueryException未被用户代码处理。无法实例化:Models.OrderViewModel

     

InnerException:从数字转换时,该值必须是小于无穷大的数字   InnerException:确保源类型可转换为目标类型。

     

如果不使用我使用其属性的对象,它可以正常工作:

ViewModel:
public int IdPedido { get; set; }
public string CategoryOrder { get; set; }
public string ModuleOrder { get; set; }

Controller:
var viewModel = orders.Select( order => new OrderViewModel{
CategoryOrder=Order.Category,
ModuleOrder=Order.Module,
...});

我错过了什么?我不明白应该兑换什么。或者无法在ViewModel上使用Objects,只能使用Properties?

如果它是可用的信息,我正在使用Nhibernate ORM。

Tks伙计们!


修改

基于@elspiko的问题,我意识到订单和订单的类型并不相同。所以我设定了订单:IEnumerable<Order> orders = pedido.Repo.All();现在它正在运作。

我认为在编辑之前它会起作用。为什么它被认为是不同的类型?

1 个答案:

答案 0 :(得分:2)

您的代码看起来不正确,应该是:

var viewModel = orders.Select(order=>new OrderViewModel
{
   Order = order, '<------------'

但我认为这只是一个错字?

它可能与延迟加载有关,如果你在select语句上放置一个调试器,订单有什么类型?它是某种形式的代理对象吗?