繁体   English   中英

UOW模式-无法创建类型的常量值在此上下文中仅支持基本类型或枚举类型

[英]UOW pattern - Unable to create a constant value of type Only primitive types or enumeration types are supported in this context

使用UOW模式和实体框架时出现问题。 下面的第一个linq,orders1,运行良好,并为SQL Server生成了一条SQL语句-这是直接由数据库直接生成的EF上下文。 在下面的第二个LINQ中,orders2,我试图为UOW模式做准备,并将数据库包装在Repository对象中-但是它引发了一个例外:“无法创建类型yyy的常量值。仅原始类型或枚举在此上下文中支持类型。”

linq的重点是查找在过去30天内未订购相同RiskID的订单。 是否有某种方式可以重写linq,以便order1不会两次调用上下文。 还是在存储库模式中可以遵循某些技术,以便可以在子查询中再次引用同一张表?

所有这些都是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();

另一个堆栈溢出后的帮助很大-我需要将DbSet转换为ObjectSet。

如何将实体框架中的DbSet转换为ObjectQuery

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM