【问题标题】:How to relate entities that are not directly mapped through a navigation property如何关联未通过导航属性直接映射的实体
【发布时间】:2009-11-04 04:54:55
【问题描述】:

我有一个对象,其中填充了四个不同相关实体的内容。但是,我有另一个实体,我不能将其作为查询的一部分包含在内,因为它在导航属性中没有直接与我正在拉的 IQueryable 表相关联。我试图包含的实体与已成功包含的四个不同实体之一相关。

有没有办法将这个实体包括(在 db 命中期间或之后)作为我正在创建的整体对象的一部分?

下面是我调用来构建 CARTITEM 对象的示例:

    public List<CARTITEM> ListCartItem(Guid cartId)
    {
        //Create the Entity object
        List<CARTITEM> itemInfo = null;

        using (Entities webStoreContext = new Entities())
        {
                //Invoke the query
                itemInfo = WebStoreDelegates.selectCartItems.Invoke(webStoreContext).ByCartID(cartId).ToList();

        }

        //Return the result set
        return itemInfo;
    }

这里是 selectCartItems 过滤器(我通常会在其中包含):

        public static Func<Entities, IQueryable<CARTITEM>> selectCartItems =
    CompiledQuery.Compile<Entities, IQueryable<CARTITEM>>(
        (cart) => from c in cart.CARTITEM.Include("ITEM").Include("SHIPPINGOPTION").Include("RELATEDITEM").Include("PROMOTION")
                  select c);

从此我有了我的 CARTITEM 对象。问题是我想在这个对象中包含 PROMOTIONTYPE 表,但是由于 CARTIEM 实体没有直接到 PROMOTIONTYPE 表的导航属性,所以我得到一个错误。

如果您需要更多说明,请告诉我。 谢谢, 比利

【问题讨论】:

    标签: entity-framework linq-to-entities


    【解决方案1】:

    您可以使用连接,如果它是同一个数据库和服务器,它应该在 SQL 中生成连接并在一次调用中完成所有操作...

    LinqToEnties join example

    【讨论】:

    • 我无法加入实体模型中未显示的交叉引用表。我的 CARTITEM 表有一个链接到 PROMOTION 表的交叉引用表。由于我无法加入我无法进入 PROMOTIONTYPE 表。
    • 我在 1683471 下再次重写了这篇文章并回答了我自己的问题。委托应该是:public static Func> selectCartItems = CompiledQuery.Compile>( (cart) => from c in cart.CARTITEM.Include("ITEM")。 Include("SHIPPINGOPTION").Include("RELATEDITEM").Include("PROMOTION.PROMOTIONTYPE") select c);如您所见,我缺少 .PROMOTIONTYPE
    猜你喜欢
    • 1970-01-01
    • 2015-05-31
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多