2014-01-23 50 views
0

我遇到了使用UOW模式和實體框架的問題。下面的第一個linq orders1工作正常,併爲SQL Server生成一個單獨的SQL語句 - 這是一個開箱即用的數據庫第一個生成的EF上下文。在下面的第二個LINQ中,orders2,我試圖爲UOW模式做好準備,並將數據庫包裝到Repository對象中 - 但是它引發了異常:「無法創建類型爲yyy的常量值。只有基本類型或枚舉類型在此上下文中受支持。「UOW模式 - 無法創建類型的常量值只有基元類型或枚舉類型在此上下文中受支持

linq的要點是找到在前30天內沒有訂購相同RiskID的訂單。有沒有辦法重寫linq,以便orders1不會調用上下文兩次;或者是否有一些技術我可以在存儲庫模式中遵循,所以我可以在子查詢中再次引用同一個表?

所有這些都是EF5。

using (var db = new xxxEntities()) 
{ 
    var orders1 = 
    (from order in db.Orders 
     where !db.Orders.Any(otherOrder => 
     otherOrder.RiskId == order.RiskId && 
     otherOrder.DateTimeOrdered < order.DateTimeOrdered && 
     otherOrder.DateTimeOrdered > EntityFunctions.AddDays(order.DateTimeOrdered, -30)) 
    select order 
    ).ToList(); 
} 

var repository = new Repository<Order>(new xxxEntities()); 

var orders2 = 
    (from order in repository.DbSet 
     where !repository.DbSet.Any(otherOrder => 
     otherOrder.RiskId == order.RiskId && 
     otherOrder.DateTimeOrdered < order.DateTimeOrdered && 
     otherOrder.DateTimeOrdered > EntityFunctions.AddDays(order.DateTimeOrdered, -30)) 
    select order 
    ).ToList(); 

回答

相關問題