2011-03-31 27 views
1

Hy Guys。使用對象的ViewModel QueryException

我有兩個實體:「交互」和「訂單」,它有很多「交互」。

在視圖上,我想爲未讀取交互的訂單創建不同的類(如<tr [email protected]>)。所以我創建了一個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 was unhandled by user code. Could not instantiate: Models.OrderViewModel

InnerException: When casting from a number, the value must be a number less than infinity InnerException: Make sure the source type is convertible to the destination type.


如果,而不是用我用自己的屬性的對象,它工作正常:

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上使用對象,只有屬性?

如果這是一個可用的信息,我使用Nhibernate ORM。

Tks guys!


編輯

基於@elspiko問題,我意識到,訂單和訂單沒有相同的類型。所以我設置了命令:IEnumerable<Order> orders = pedido.Repo.All();現在它正在工作。

我認爲它會在編輯之前工作。爲什麼它被認爲是不同的類型?

+0

+1,因爲'IsReaded' – smartcaveman 2011-03-31 15:02:29

回答

2

您的代碼看起來不正確的,它應該是:

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

但我猜想那只是一個錯字?

它可能與延遲加載有關,如果您將調試器放在select語句中,那麼order是什麼類型?它是代理對象的某種形式嗎?

+0

我編輯了代碼。它確實是。韓國社交協會。所以,訂單{Nhibernate.Linq.Query }。這是一種代理形式。 – Thiago 2011-03-31 15:29:45

+0

訂單怎麼樣? – justcompile 2011-03-31 15:46:43

+0

訂單的類型是DTOS.Entities.Order – Thiago 2011-03-31 17:11:39